Updating branch refs/heads/master to b93f219eb75efb3769f5d1a150831a4a1f09291d (commit) from ccf616594ecd39b49bb632372c7cd28557a776f1 (commit)
commit b93f219eb75efb3769f5d1a150831a4a1f09291d Author: Nick Schermer <n...@xfce.org> Date: Wed Dec 12 09:29:50 2007 +0000 * mousepad/mousepad-window.c: Try to find the file encoding in the recent history, when opening a document that didn't pass the UTF-8 check. (Old svn revision: 26460) ChangeLog | 7 +++ mousepad/mousepad-window.c | 89 +++++++++++++++++++++++++++++++++++-------- 2 files changed, 79 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 61cccf7..9ecd7a6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-12-12 Nick Schermer <n...@xfce.org> + + * mousepad/mousepad-window.c: Try to find the file encoding in the + recent history, when opening a document that didn't pass the + UTF-8 check. + + 2007-12-10 Nick Schermer <n...@xfce.org> * mousepad/mousepad-undo.c: Remove testing messages. diff --git a/mousepad/mousepad-window.c b/mousepad/mousepad-window.c index 3fa577a..32cc765 100644 --- a/mousepad/mousepad-window.c +++ b/mousepad/mousepad-window.c @@ -184,6 +184,7 @@ static void mousepad_window_recent_manager_init (MousepadW static gboolean mousepad_window_recent_menu_idle (gpointer user_data); static void mousepad_window_recent_menu_idle_destroy (gpointer user_data); static void mousepad_window_recent_menu (MousepadWindow *window); +static const gchar *mousepad_window_recent_get_encoding (GtkRecentInfo *info); static void mousepad_window_recent_clear (MousepadWindow *window); /* dnd */ @@ -957,9 +958,12 @@ mousepad_window_open_file (MousepadWindow *window, gboolean succeed = FALSE; gint npages = 0, i; gint response; - const gchar *new_encoding; const gchar *opened_filename; + const gchar *new_encoding; GtkWidget *dialog; + gboolean encoding_from_recent = FALSE; + gchar *uri; + GtkRecentInfo *info; _mousepad_return_val_if_fail (MOUSEPAD_IS_WINDOW (window), FALSE); _mousepad_return_val_if_fail (filename != NULL && *filename != '\0', FALSE); @@ -1023,6 +1027,43 @@ mousepad_window_open_file (MousepadWindow *window, /* clear the error */ g_clear_error (&error); + /* try to lookup the encoding from the recent history */ + if (encoding_from_recent == FALSE) + { + /* don't try this again */ + encoding_from_recent = TRUE; + + /* build uri */ + uri = g_filename_to_uri (filename, NULL, NULL); + if (G_LIKELY (uri != NULL)) + { + /* try to lookup the recent item */ + info = gtk_recent_manager_lookup_item (window->recent_manager, uri, NULL); + + /* cleanup */ + g_free (uri); + + if (info) + { + /* try to find the encoding */ + new_encoding = mousepad_window_recent_get_encoding (info); + + /* release */ + gtk_recent_info_unref (info); + + /* try again if the encoding looks usefull, else + * fall-trough and open encoding dialog */ + if (G_LIKELY (new_encoding != NULL)) + { + /* set encoding */ + mousepad_file_set_encoding (document->file, new_encoding); + + goto try_open_again; + } + } + } + } + /* run the encoding dialog */ dialog = mousepad_encoding_dialog_new (GTK_WINDOW (window), document->file); @@ -1031,10 +1072,10 @@ mousepad_window_open_file (MousepadWindow *window, if (response == GTK_RESPONSE_OK) { - /* get the selected encoding */ + /* set the new encoding */ new_encoding = mousepad_encoding_dialog_get_encoding (MOUSEPAD_ENCODING_DIALOG (dialog)); - /* set the document encoding */ + /* set encoding */ mousepad_file_set_encoding (document->file, new_encoding); } @@ -2475,6 +2516,30 @@ mousepad_window_recent_menu (MousepadWindow *window) +static const gchar * +mousepad_window_recent_get_encoding (GtkRecentInfo *info) +{ + const gchar *description; + const gchar *encoding = NULL; + gint offset; + + /* get the description */ + description = gtk_recent_info_get_description (info); + if (G_LIKELY (description)) + { + /* get the offset length: 'Encoding: ' */ + offset = strlen (_("Encoding")) + 2; + + /* check if the encoding string looks valid, if so, set it */ + if (G_LIKELY (strlen (description) > offset)) + encoding = description + offset; + } + + return encoding; +} + + + static void mousepad_window_recent_clear (MousepadWindow *window) { @@ -3169,10 +3234,9 @@ static void mousepad_window_action_open_recent (GtkAction *action, MousepadWindow *window) { - const gchar *uri, *description; - const gchar *encoding = NULL; + const gchar *uri; + const gchar *encoding; GError *error = NULL; - gint offset; gchar *filename; gboolean succeed = FALSE; GtkRecentInfo *info; @@ -3196,17 +3260,8 @@ mousepad_window_action_open_recent (GtkAction *action, /* open the file in a new tab if it exists */ if (g_file_test (filename, G_FILE_TEST_EXISTS)) { - /* check if we set the encoding in the recent description */ - description = gtk_recent_info_get_description (info); - if (G_LIKELY (description)) - { - /* get the offset length */ - offset = strlen (_("Encoding")) + 2; - - /* check if the encoding string looks valid and set it */ - if (G_LIKELY (strlen (description) > offset)) - encoding = description + offset; - } + /* try to get the encoding from the recent description */ + encoding = mousepad_window_recent_get_encoding (info); /* try to open the file */ succeed = mousepad_window_open_file (window, filename, encoding); _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits