]> www.fi.muni.cz Git - evince.git/commitdiff
Add a command line option for search. Fixes bug #497710.
authorCarlos Garcia Campos <carlosgc@gnome.org>
Sun, 25 Nov 2007 16:54:00 +0000 (16:54 +0000)
committerCarlos Garcia Campos <carlosgc@src.gnome.org>
Sun, 25 Nov 2007 16:54:00 +0000 (16:54 +0000)
2007-11-25  Carlos Garcia Campos  <carlosgc@gnome.org>
* shell/ev-application.[ch]: (get_find_string_from_args),
(ev_application_open_uri_at_dest), (ev_application_open_uri),
(ev_application_open_uri_list):
* shell/ev-jobs.[ch]: (ev_job_load_dispose), (ev_job_load_new):
* shell/ev-window.[ch]: (ev_window_load_job_cb),
(ev_window_open_uri), (ev_window_cmd_file_open_copy_at_dest),
(ev_window_cmd_recent_file_activate),
(ev_window_open_recent_action_item_activated),
(ev_window_print_send), (open_remote_link):
* shell/main.c: (arguments_parse):
Add a command line option for search. Fixes bug #497710.

svn path=/trunk/; revision=2746

ChangeLog
shell/ev-application.c
shell/ev-application.h
shell/ev-jobs.c
shell/ev-jobs.h
shell/ev-window.c
shell/ev-window.h
shell/main.c

index 928e6ba28b9cdf097ac58a53267872a9aed1e373..e3a13e4bfb503ce8374939216fa6326303311db6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2007-11-25  Carlos Garcia Campos  <carlosgc@gnome.org>
+
+       * shell/ev-application.[ch]: (get_find_string_from_args),
+       (ev_application_open_uri_at_dest), (ev_application_open_uri),
+       (ev_application_open_uri_list):
+       * shell/ev-jobs.[ch]: (ev_job_load_dispose), (ev_job_load_new):
+       * shell/ev-window.[ch]: (ev_window_load_job_cb),
+       (ev_window_open_uri), (ev_window_cmd_file_open_copy_at_dest),
+       (ev_window_cmd_recent_file_activate),
+       (ev_window_open_recent_action_item_activated),
+       (ev_window_print_send), (open_remote_link):
+       * shell/main.c: (arguments_parse):
+
+       Add a command line option for search. Fixes bug #497710.
+       
 2007-11-20  Darren Kenny  <darren.kenny@sun.com>
 
        * shell/ev-jobs.c: (ev_job_print_new):
index deac0ed5529221e7b16cd665a843c985e84d9acd..2be350e4f9d51dc799c08133503d1fe27c1d6d31 100644 (file)
@@ -322,6 +322,18 @@ get_destination_from_args (GHashTable *args)
        return dest;
 }
 
+static const gchar *
+get_find_string_from_args (GHashTable *args)
+{
+       GValue *value = NULL;
+
+       g_assert (args != NULL);
+
+       value = g_hash_table_lookup (args, "find-string");
+       
+       return value ? g_value_get_string (value) : NULL;
+}
+
 /**
  * get_unlink_temp_file_from_args:
  * @args: a #GHashTable with data passed to the application.
@@ -520,6 +532,7 @@ ev_application_open_uri_at_dest (EvApplication  *application,
                                 GdkScreen      *screen,
                                 EvLinkDest     *dest,
                                 EvWindowRunMode mode,
+                                const gchar    *search_string,
                                 gboolean        unlink_temp_file,
                                 const gchar    *print_settings, 
                                 guint           timestamp)
@@ -545,7 +558,7 @@ ev_application_open_uri_at_dest (EvApplication  *application,
 
        /* We need to load uri before showing the window, so
           we can restore window size without flickering */     
-       ev_window_open_uri (new_window, uri, dest, mode,
+       ev_window_open_uri (new_window, uri, dest, mode, search_string, 
                            unlink_temp_file, print_settings);
 
        ev_document_fc_mutex_lock ();
@@ -573,6 +586,7 @@ ev_application_open_uri (EvApplication  *application,
 {
        EvLinkDest      *dest = NULL;
        EvWindowRunMode  mode = EV_WINDOW_MODE_NORMAL;
+       const gchar     *search_string = NULL;
        gboolean         unlink_temp_file = FALSE;
        const gchar     *print_settings = NULL;
        GdkScreen       *screen = NULL;
@@ -581,13 +595,15 @@ ev_application_open_uri (EvApplication  *application,
                screen = get_screen_from_args (args);
                dest = get_destination_from_args (args);
                mode = get_window_run_mode_from_args (args);
+               search_string = get_find_string_from_args (args);
                unlink_temp_file = (mode == EV_WINDOW_MODE_PREVIEW &&
                                    get_unlink_temp_file_from_args (args));
                print_settings = get_print_settings_from_args (args);
        }
        
        ev_application_open_uri_at_dest (application, uri, screen,
-                                        dest, mode, unlink_temp_file,
+                                        dest, mode, search_string,
+                                        unlink_temp_file,
                                         print_settings, timestamp);
 
        if (dest)
@@ -606,8 +622,8 @@ ev_application_open_uri_list (EvApplication *application,
 
        for (l = uri_list; l != NULL; l = l->next) {
                ev_application_open_uri_at_dest (application, (char *)l->data,
-                                                screen, NULL, 0, FALSE,
-                                                NULL, timestamp);
+                                                screen, NULL, 0, NULL,
+                                                FALSE, NULL, timestamp);
        }
 }
 
index 199fd55878a79bd30893891586e8c6cc3c3f3a97..7b7588a1d99fe231666ceb2e4a975e773bc478e6 100644 (file)
@@ -72,6 +72,7 @@ void              ev_application_open_uri_at_dest    (EvApplication   *applicati
                                                      GdkScreen       *screen,
                                                      EvLinkDest      *dest,
                                                      EvWindowRunMode  mode,
+                                                     const gchar     *search_string,
                                                      gboolean         unlink_temp_file,
                                                      const gchar     *print_settings, 
                                                      guint32          timestamp);
index 8c59af877265ae8413e2ca68e9fd984a9166492a..4bb0bf6f9db565a2b6a6c4d79dea77f105c3b21c 100644 (file)
@@ -499,6 +499,11 @@ ev_job_load_dispose (GObject *object)
                job->dest = NULL;
        }
 
+       if (job->search_string) {
+               g_free (job->search_string);
+               job->search_string = NULL;
+       }
+
        (* G_OBJECT_CLASS (ev_job_load_parent_class)->dispose) (object);
 }
 
@@ -514,7 +519,10 @@ ev_job_load_class_init (EvJobLoadClass *class)
 
 
 EvJob *
-ev_job_load_new (const gchar *uri, EvLinkDest *dest, EvWindowRunMode mode)
+ev_job_load_new (const gchar    *uri,
+                EvLinkDest     *dest,
+                EvWindowRunMode mode,
+                const gchar    *search_string)
 {
        EvJobLoad *job;
 
@@ -525,6 +533,8 @@ ev_job_load_new (const gchar *uri, EvLinkDest *dest, EvWindowRunMode mode)
                job->dest = g_object_ref (dest);
 
        job->mode = mode;
+       if (search_string)
+               job->search_string = g_strdup (search_string);
 
        return EV_JOB (job);
 }
index 6a35c834e7c013a6baab4bee8141d978dcedee4e..c6d73a1a3614453856dce2a975318ae448a83443 100644 (file)
@@ -189,6 +189,7 @@ struct _EvJobLoad
        
        EvLinkDest *dest;
        EvWindowRunMode mode;
+       gchar *search_string;
        GError *error;
        gchar *uri;
 };
@@ -276,7 +277,8 @@ void                ev_job_fonts_run          (EvJobFonts      *fonts);
 GType          ev_job_load_get_type      (void) G_GNUC_CONST;
 EvJob         *ev_job_load_new           (const gchar     *uri,
                                           EvLinkDest      *dest,
-                                          EvWindowRunMode  mode);
+                                          EvWindowRunMode  mode,
+                                          const gchar     *search_string);
 void            ev_job_load_set_uri       (EvJobLoad       *load,
                                           const gchar     *uri);
 void           ev_job_load_run           (EvJobLoad       *load);
index 6c15e79146e39985573ee254c542ac72de3c0477..c53b772b448f761de91ecf50a151ae5285a750b3 100644 (file)
@@ -265,6 +265,8 @@ static void ev_window_cmd_view_page_width           (GtkAction        *action,
 static void    view_handle_link_cb                     (EvView           *view, 
                                                         EvLink           *link, 
                                                         EvWindow         *window);
+static void     ev_window_cmd_edit_find                 (GtkAction        *action,
+                                                        EvWindow         *ev_window);
 static void     find_bar_search_changed_cb              (EggFindBar       *find_bar,
                                                         GParamSpec       *param,
                                                         EvWindow         *ev_window);
@@ -1342,6 +1344,10 @@ ev_window_load_job_cb  (EvJobLoad *job,
                                find_bar_search_changed_cb (EGG_FIND_BAR (ev_window->priv->find_bar),
                                                            NULL, ev_window);
                        }
+               } else if (job->search_string && EV_IS_DOCUMENT_FIND (document)) {
+                       ev_window_cmd_edit_find (NULL, ev_window);
+                       egg_find_bar_set_search_string (EGG_FIND_BAR (ev_window->priv->find_bar),
+                                                       job->search_string);
                }
 
                ev_window_clear_load_job (ev_window);
@@ -1448,6 +1454,7 @@ ev_window_open_uri (EvWindow       *ev_window,
                    const char     *uri,
                    EvLinkDest     *dest,
                    EvWindowRunMode mode,
+                   const gchar    *search_string, 
                    gboolean        unlink_temp_file,
                    const gchar    *print_settings)
 {
@@ -1478,7 +1485,7 @@ ev_window_open_uri (EvWindow       *ev_window,
 
        setup_size_from_metadata (ev_window);
        
-       ev_window->priv->load_job = ev_job_load_new (uri, dest, mode);
+       ev_window->priv->load_job = ev_job_load_new (uri, dest, mode, search_string);
        g_signal_connect (ev_window->priv->load_job,
                          "finished",
                          G_CALLBACK (ev_window_load_job_cb),
@@ -1680,6 +1687,7 @@ ev_window_cmd_file_open_copy_at_dest (EvWindow *window, EvLinkDest *dest)
                                         gtk_window_get_screen (GTK_WINDOW (window)),
                                         dest,
                                         0,
+                                        NULL, 
                                         TRUE,
                                         NULL,
                                         GDK_CURRENT_TIME);
@@ -1715,7 +1723,7 @@ ev_window_cmd_recent_file_activate (GtkAction *action,
        
        ev_application_open_uri_at_dest (EV_APP, uri,
                                         gtk_window_get_screen (GTK_WINDOW (window)),
-                                        NULL, 0, FALSE, NULL, 
+                                        NULL, 0, NULL, FALSE, NULL, 
                                         GDK_CURRENT_TIME);
 }
 
@@ -1726,7 +1734,7 @@ ev_window_open_recent_action_item_activated (EvOpenRecentAction *action,
 {
        ev_application_open_uri_at_dest (EV_APP, uri,
                                         gtk_window_get_screen (GTK_WINDOW (window)),
-                                        NULL, 0, FALSE, NULL, 
+                                        NULL, 0, NULL, FALSE, NULL, 
                                         GDK_CURRENT_TIME);
 }
 
@@ -2186,6 +2194,7 @@ ev_window_print_send (EvWindow    *window,
                                                 gtk_window_get_screen (GTK_WINDOW (window)),
                                                 NULL,
                                                 EV_WINDOW_MODE_PREVIEW,
+                                                NULL, 
                                                 TRUE,
                                                 print_settings_file,
                                                 GDK_CURRENT_TIME);
@@ -3242,7 +3251,7 @@ ev_window_cmd_view_reload (GtkAction *action, EvWindow *ev_window)
        gchar *uri;
 
        uri = g_strdup (ev_window->priv->uri);
-       ev_window_open_uri (ev_window, uri, NULL, 0, FALSE, NULL);
+       ev_window_open_uri (ev_window, uri, NULL, 0, NULL, FALSE, NULL);
        g_free (uri);
 }
 
@@ -4740,6 +4749,7 @@ open_remote_link (EvWindow *window, EvLinkAction *action)
                                         gtk_window_get_screen (GTK_WINDOW (window)),
                                         ev_link_action_get_dest (action),
                                         0,
+                                        NULL, 
                                         FALSE,
                                         NULL,
                                         GDK_CURRENT_TIME);
index 0b8158f3918b4567aa3972b22083e5db05449bc4..863f543f48aa2362e04fa6defee37c90e12eff55 100644 (file)
@@ -78,9 +78,11 @@ void         ev_window_open_uri        (EvWindow       *ev_window,
                                           const char     *uri,
                                           EvLinkDest     *dest,
                                           EvWindowRunMode mode,
+                                          const gchar    *search_string,
                                           gboolean        unlink_temp_file,
                                           const gchar    *print_settings);
 gboolean       ev_window_is_empty        (const EvWindow *ev_window);
+
 #ifdef WITH_PRINT
 void           ev_window_print_range     (EvWindow       *ev_window,
                                           int             first_page,
index cd6429307bb559d59460af84d9e3221cbc71ea75..b7362e06e0255363d3fdb226ca56923a53b56e79 100644 (file)
@@ -47,6 +47,7 @@
 #include "ev-file-helpers.h"
 
 static gchar   *ev_page_label;
+static gchar   *ev_find_string;
 static gboolean preview_mode = FALSE;
 static gboolean fullscren_mode = FALSE;
 static gboolean presentation_mode = FALSE;
@@ -60,6 +61,7 @@ static const GOptionEntry goption_options[] =
        { "fullscreen", 'f', 0, G_OPTION_ARG_NONE, &fullscren_mode, N_("Run evince in fullscreen mode"), NULL },
        { "presentation", 's', 0, G_OPTION_ARG_NONE, &presentation_mode, N_("Run evince in presentation mode"), NULL },
        { "preview", 'w', 0, G_OPTION_ARG_NONE, &preview_mode, N_("Run evince as a previewer"), NULL },
+       { "find", 'l', 0, G_OPTION_ARG_STRING, &ev_find_string, N_("The word or phrase to find in the document"), N_("STRING")},
        { "unlink-tempfile", 'u', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &unlink_temp_file, NULL, NULL },
        { "print-settings", 't', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_FILENAME, &print_settings, NULL, NULL },
        { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &file_arguments, NULL, N_("[FILE...]") },
@@ -134,6 +136,17 @@ arguments_parse (void)
                ev_page_label = NULL;
        }
 
+       if (ev_find_string) {
+               value = g_new0 (GValue, 1);
+               g_value_init (value, G_TYPE_STRING);
+               g_value_set_string (value, ev_find_string);
+
+               g_hash_table_insert (args, g_strdup ("find-string"), value);
+
+               g_free (ev_find_string);
+               ev_page_label = NULL;
+       }
+
        if (fullscren_mode)
                mode = EV_WINDOW_MODE_FULLSCREEN;
        else if (presentation_mode)