]> www.fi.muni.cz Git - evince.git/commitdiff
Update fullscreen and presentation timeout handling. Hide cursor in
authorNickolay V. Shmyrev <nshmyrev@src.gnome.org>
Fri, 5 May 2006 15:03:13 +0000 (15:03 +0000)
committerNickolay V. Shmyrev <nshmyrev@src.gnome.org>
Fri, 5 May 2006 15:03:13 +0000 (15:03 +0000)
* data/evince.desktop.in.in:
* shell/ev-view.c: (view_update_range_and_current_page),
(ev_view_next_page), (ev_view_previous_page):
* shell/ev-window.c: (update_chrome_visibility),
(setup_sidebar_from_metadata), (ev_window_setup_document),
(ev_window_update_fullscreen_popup), (fullscreen_timeout_cb),
(fullscreen_set_timeout), (fullscreen_clear_timeout),
(fullscreen_motion_notify_cb), (ev_window_run_fullscreen),
(ev_window_stop_fullscreen), (ev_window_run_presentation),
(ev_window_stop_presentation), (ev_window_focus_in_event),
(ev_window_focus_out_event), (ev_window_view_sidebar_cb),
(ev_window_init):
* thumbnailer/Makefile.am:

Update fullscreen and presentation timeout handling. Hide
cursor in presentation after timeout. Fix for the bugs
#136359 and #336981.

ChangeLog
data/evince.desktop.in.in
shell/ev-view.c
shell/ev-window.c
thumbnailer/Makefile.am

index 0c60baae61fc613e9872493fe77a50934c947e75..0816e65e62743089f40f3545c8c8c9eaa437a4fe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2006-05-05  Nickolay V. Shmyrev  <<nshmyrev@yandex.ru>>
+
+       * data/evince.desktop.in.in:
+       * shell/ev-view.c: (view_update_range_and_current_page),
+       (ev_view_next_page), (ev_view_previous_page):
+       * shell/ev-window.c: (update_chrome_visibility),
+       (setup_sidebar_from_metadata), (ev_window_setup_document),
+       (ev_window_update_fullscreen_popup), (fullscreen_timeout_cb),
+       (fullscreen_set_timeout), (fullscreen_clear_timeout),
+       (fullscreen_motion_notify_cb), (ev_window_run_fullscreen),
+       (ev_window_stop_fullscreen), (ev_window_run_presentation),
+       (ev_window_stop_presentation), (ev_window_focus_in_event),
+       (ev_window_focus_out_event), (ev_window_view_sidebar_cb),
+       (ev_window_init):
+       * thumbnailer/Makefile.am:
+       
+       Update fullscreen and presentation timeout handling. Hide
+       cursor in presentation after timeout. Fix for the bugs
+       #136359 and #336981.
+
 2006-05-03  Carlos Garcia Campos  <carlosgc@gnome.org>
 
        * backend/ev-link-action.[ch]:
index 238740cbb0c47aa9fd343a64665c5bb174c284b8..4f41242c39213680ae6e19b5b77fa36d6f06c095 100644 (file)
@@ -8,7 +8,7 @@ Exec=evince %U
 StartupNotify=true
 Terminal=false
 Type=Application
-Icon=postscript-viewer.png
+Icon=evince.png
 NoDisplay=true
 X-GNOME-DocPath=
 X-GNOME-Bugzilla-Bugzilla=GNOME
index e3f07dc9e91fc1f67883d9ea01fca742a99f03b6..7c009d6b4628e20de429f9245eea0a641889e0bd 100644 (file)
@@ -438,7 +438,7 @@ view_update_range_and_current_page (EvView *view)
                GdkRectangle current_area, unused, page_area;
                GtkBorder border;
                gboolean found = FALSE;
-               gint area_max, area;
+               gint area_max = -1, area;
                int i;
 
                if (!(view->vadjustment && view->hadjustment))
@@ -4124,6 +4124,9 @@ ev_view_next_page (EvView *view)
        int page;
 
        g_return_val_if_fail (EV_IS_VIEW (view), FALSE);
+       
+       if (!view->page_cache)
+               return FALSE;
 
        page = ev_page_cache_get_current_page (view->page_cache);
 
@@ -4150,6 +4153,9 @@ ev_view_previous_page (EvView *view)
 
        g_return_val_if_fail (EV_IS_VIEW (view), FALSE);
 
+       if (!view->page_cache)
+               return FALSE;
+
        page = ev_page_cache_get_current_page (view->page_cache);
 
        if (view->dual_page && !view->presentation)
index c04801a4f34c1027385c22fc7abe9e2204c3c15b..fdec009443a0eae82e5afccfd67676818c9c0df3 100644 (file)
@@ -90,7 +90,10 @@ typedef enum {
        EV_CHROME_TOOLBAR       = 1 << 1,
        EV_CHROME_FINDBAR       = 1 << 2,
        EV_CHROME_RAISE_TOOLBAR = 1 << 3,
-       EV_CHROME_NORMAL        = EV_CHROME_MENUBAR | EV_CHROME_TOOLBAR
+       EV_CHROME_FULLSCREEN_TOOLBAR    = 1 << 4,
+       EV_CHROME_SIDEBAR       = 1 << 5,
+       EV_CHROME_ATTACHBAR     = 1 << 6,
+       EV_CHROME_NORMAL        = EV_CHROME_MENUBAR | EV_CHROME_TOOLBAR | EV_CHROME_SIDEBAR
 } EvChrome;
 
 struct _EvWindowPrivate {
@@ -201,7 +204,6 @@ static void     ev_window_run_presentation              (EvWindow         *windo
 static void     ev_window_stop_presentation             (EvWindow         *window);
 static void     ev_window_cmd_view_presentation         (GtkAction        *action,
                                                         EvWindow         *window);
-static void     show_fullscreen_popup                   (EvWindow         *window);
 static void     ev_view_popup_cmd_open_link             (GtkAction        *action,
                                                         EvWindow         *window);
 static void     ev_view_popup_cmd_copy_link_address     (GtkAction        *action,
@@ -214,6 +216,13 @@ static void        ev_window_cmd_view_best_fit             (GtkAction        *action,
                                                         EvWindow         *ev_window);
 static void    ev_window_cmd_view_page_width           (GtkAction        *action, 
                                                         EvWindow         *ev_window);
+static void    fullscreen_set_timeout                  (EvWindow *window);
+static gboolean fullscreen_motion_notify_cb            (GtkWidget *widget,
+                                                        GdkEventMotion *event,
+                                                        gpointer user_data);
+static gboolean fullscreen_leave_notify_cb             (GtkWidget *widget,
+                                                        GdkEventCrossing *event,
+                                                        gpointer user_data);
 
 G_DEFINE_TYPE (EvWindow, ev_window, GTK_TYPE_WINDOW)
 
@@ -410,7 +419,7 @@ static void
 update_chrome_visibility (EvWindow *window)
 {
        EvWindowPrivate *priv = window->priv;
-       gboolean menubar, toolbar, findbar, fullscreen_toolbar;
+       gboolean menubar, toolbar, findbar, fullscreen_toolbar, sidebar, attachbar;
        gboolean fullscreen_mode, presentation, fullscreen;
 
        presentation = ev_view_get_presentation (EV_VIEW (priv->view));
@@ -420,24 +429,24 @@ update_chrome_visibility (EvWindow *window)
        menubar = (priv->chrome & EV_CHROME_MENUBAR) != 0 && !fullscreen_mode;
        toolbar = ((priv->chrome & EV_CHROME_TOOLBAR) != 0  || 
                   (priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0) && !fullscreen_mode;
-       fullscreen_toolbar = ((priv->chrome & EV_CHROME_TOOLBAR) != 0 ||
-                             (priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0);
+       fullscreen_toolbar = ((priv->chrome & EV_CHROME_FULLSCREEN_TOOLBAR) != 0 || 
+                             (priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0) && fullscreen;
        findbar = (priv->chrome & EV_CHROME_FINDBAR) != 0;
+       sidebar = (priv->chrome & EV_CHROME_SIDEBAR) != 0 && !fullscreen_mode;
+       attachbar = (priv->chrome & EV_CHROME_ATTACHBAR) != 0 && !fullscreen_mode;
 
        set_widget_visibility (priv->menubar, menubar); 
        set_widget_visibility (priv->toolbar_dock, toolbar);
        set_widget_visibility (priv->find_bar, findbar);
+       set_widget_visibility (priv->sidebar, sidebar);
+       set_widget_visibility (priv->attachment_bar, attachbar);
 
        ev_window_set_action_sensitive (window, "EditToolbar", toolbar);
        gtk_widget_set_sensitive (priv->menubar, menubar);
 
        if (priv->fullscreen_popup != NULL) {
-               if (fullscreen)
-                       show_fullscreen_popup (window);
-               else
-                       set_widget_visibility (priv->fullscreen_popup, FALSE);
-
                set_widget_visibility (priv->fullscreen_toolbar, fullscreen_toolbar);
+               set_widget_visibility (priv->fullscreen_popup, fullscreen_toolbar);
        }
 }
 
@@ -582,26 +591,6 @@ update_document_mode (EvWindow *window, EvDocumentMode mode)
        }
 }
 
-static void
-update_sidebar_visibility (EvWindow *window)
-{
-       char *uri = window->priv->uri;
-       GValue sidebar_visibility = { 0, };
-
-       if (ev_metadata_manager_get (uri, "sidebar_visibility", &sidebar_visibility, FALSE)) {
-               set_widget_visibility (window->priv->sidebar,
-                                      g_value_get_boolean (&sidebar_visibility));
-       }
-}
-
-static void
-update_attachment_bar_visibility (EvWindow *window)
-{
-       set_widget_visibility (window->priv->attachment_bar,
-                              (window->priv->document &&
-                              ev_document_has_attachments (window->priv->document)));
-}
-
 static void
 setup_document_from_metadata (EvWindow *window)
 {
@@ -639,6 +628,7 @@ setup_sidebar_from_metadata (EvWindow *window, EvDocument *document)
        GtkWidget *thumbs = window->priv->sidebar_thumbs;
        GValue sidebar_size = { 0, };
        GValue sidebar_page = { 0, };
+       GValue sidebar_visibility = { 0, };
 
        if (ev_metadata_manager_get (uri, "sidebar_size", &sidebar_size, FALSE)) {
                gtk_paned_set_position (GTK_PANED (window->priv->hpaned),
@@ -659,7 +649,9 @@ setup_sidebar_from_metadata (EvWindow *window, EvDocument *document)
                }
        }
 
-       update_sidebar_visibility (window);
+       if (ev_metadata_manager_get (uri, "sidebar_visibility", &sidebar_visibility, FALSE)) {
+               update_chrome_flag (window, EV_CHROME_SIDEBAR, g_value_get_boolean (&sidebar_visibility));
+       }
 }
 
 static void
@@ -794,7 +786,9 @@ ev_window_setup_document (EvWindow *ev_window)
        ev_window_set_page_mode (ev_window, PAGE_MODE_DOCUMENT);
 
        ev_attachment_bar_set_document (attachbar, document);
-       update_attachment_bar_visibility (ev_window);
+       update_chrome_flag (ev_window, EV_CHROME_ATTACHBAR, 
+                          (ev_window->priv->document &&
+                           ev_document_has_attachments (ev_window->priv->document)));
 
        ev_window_title_set_document (ev_window->priv->title, document);
        ev_window_title_set_uri (ev_window->priv->title, ev_window->priv->uri);
@@ -1493,7 +1487,7 @@ ev_window_update_fullscreen_popup (EvWindow *window)
        if (GTK_WIDGET (window)->window == NULL)
                return;
 
-       toolbar = (window->priv->chrome & EV_CHROME_TOOLBAR) != 0 || 
+       toolbar = (window->priv->chrome & EV_CHROME_FULLSCREEN_TOOLBAR) != 0 || 
                  (window->priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0;
        popup_width = popup->requisition.width;
        popup_height = popup->requisition.height;
@@ -1573,10 +1567,9 @@ static gboolean
 fullscreen_timeout_cb (gpointer data)
 {
        EvWindow *window = EV_WINDOW (data);
-
-       g_object_set (window->priv->fullscreen_popup, "visible", FALSE, NULL);
+       
+       update_chrome_flag (window, EV_CHROME_FULLSCREEN_TOOLBAR, FALSE);
        ev_view_hide_cursor (EV_VIEW (window->priv->view));
-
        window->priv->fullscreen_timeout_id = 0;
 
        return FALSE;
@@ -1591,6 +1584,10 @@ fullscreen_set_timeout (EvWindow *window)
        
        window->priv->fullscreen_timeout_id = 
            g_timeout_add (FULLSCREEN_TIMEOUT, fullscreen_timeout_cb, window);
+
+       update_chrome_flag (window, EV_CHROME_FULLSCREEN_TOOLBAR, TRUE);
+       update_chrome_visibility (window);
+       ev_view_show_cursor (EV_VIEW (window->priv->view));
 }
 
 static void
@@ -1599,23 +1596,13 @@ fullscreen_clear_timeout (EvWindow *window)
        if (window->priv->fullscreen_timeout_id != 0) {
                g_source_remove (window->priv->fullscreen_timeout_id);
        }
-
+       
        window->priv->fullscreen_timeout_id = 0;
+       update_chrome_visibility (window);
        ev_view_show_cursor (EV_VIEW (window->priv->view));
 }
 
 
-static void
-show_fullscreen_popup (EvWindow *window)
-{
-       if (!GTK_WIDGET_VISIBLE (window->priv->fullscreen_popup)) {
-               g_object_set (window->priv->fullscreen_popup, "visible", TRUE, NULL);
-               ev_view_show_cursor (EV_VIEW (window->priv->view));
-       }
-
-       fullscreen_set_timeout (window);        
-}
-
 static gboolean
 fullscreen_motion_notify_cb (GtkWidget *widget,
                             GdkEventMotion *event,
@@ -1623,7 +1610,7 @@ fullscreen_motion_notify_cb (GtkWidget *widget,
 {
        EvWindow *window = EV_WINDOW (user_data);
 
-       show_fullscreen_popup (window);
+       fullscreen_set_timeout (window);
 
        return FALSE;
 }
@@ -1723,19 +1710,21 @@ ev_window_update_fullscreen_action (EvWindow *window)
 static void
 ev_window_run_fullscreen (EvWindow *window)
 {
-       ev_view_set_fullscreen (EV_VIEW (window->priv->view), TRUE);
        if (window->priv->fullscreen_popup == NULL)
                window->priv->fullscreen_popup
                        = ev_window_create_fullscreen_popup (window);
 
-       update_chrome_visibility (window);
-       gtk_widget_hide (window->priv->sidebar);
-       gtk_widget_hide (window->priv->attachment_bar);
-
        g_object_set (G_OBJECT (window->priv->scrolled_window),
                      "shadow-type", GTK_SHADOW_NONE,
                      NULL);
+
+       ev_view_set_fullscreen (EV_VIEW (window->priv->view), TRUE);
+       ev_window_update_fullscreen_action (window);
        
+       gtk_window_fullscreen (GTK_WINDOW (window));
+       gtk_widget_grab_focus (window->priv->view);
+       ev_window_update_fullscreen_popup (window);
+
        g_signal_connect (window->priv->view,
                          "motion-notify-event",
                          G_CALLBACK (fullscreen_motion_notify_cb),
@@ -1746,11 +1735,6 @@ ev_window_run_fullscreen (EvWindow *window)
                          window);
        fullscreen_set_timeout (window);
 
-       gtk_widget_grab_focus (window->priv->view);
-       ev_window_update_fullscreen_action (window);
-       gtk_window_fullscreen (GTK_WINDOW (window));
-       ev_window_update_fullscreen_popup (window);
-
        if (!ev_window_is_empty (window))
                ev_metadata_manager_set_boolean (window->priv->uri, "fullscreen", TRUE);
 }
@@ -1763,24 +1747,21 @@ ev_window_stop_fullscreen (EvWindow *window)
        if (!ev_view_get_fullscreen (EV_VIEW (view)))
                return;
 
-       ev_view_set_fullscreen (view, FALSE);
        g_object_set (G_OBJECT (window->priv->scrolled_window),
                      "shadow-type", GTK_SHADOW_IN,
                      NULL);
 
-       fullscreen_clear_timeout (window);
+       ev_view_set_fullscreen (view, FALSE);
+       ev_window_update_fullscreen_action (window);
+       gtk_window_unfullscreen (GTK_WINDOW (window));
 
-       g_signal_handlers_disconnect_by_func (view,
+       g_signal_handlers_disconnect_by_func (window->priv->view,
                                              (gpointer) fullscreen_motion_notify_cb,
                                              window);
-       g_signal_handlers_disconnect_by_func (view,
+       g_signal_handlers_disconnect_by_func (window->priv->view,
                                              (gpointer) fullscreen_leave_notify_cb,
                                              window);
-       ev_window_update_fullscreen_action (window);
-       gtk_window_unfullscreen (GTK_WINDOW (window));
-       update_chrome_visibility (window);
-       update_sidebar_visibility (window);
-       update_attachment_bar_visibility (window);
+       fullscreen_clear_timeout (window);
 
        if (!ev_window_is_empty (window))
                ev_metadata_manager_set_boolean (window->priv->uri, "fullscreen", FALSE);
@@ -1823,13 +1804,21 @@ ev_window_run_presentation (EvWindow *window)
                      "shadow-type", GTK_SHADOW_NONE,
                      NULL);
 
-       gtk_widget_grab_focus (window->priv->view);
        ev_view_set_presentation (EV_VIEW (window->priv->view), TRUE);
-       gtk_window_fullscreen (GTK_WINDOW (window));
        ev_window_update_presentation_action (window);
-       update_chrome_visibility (window);
-       gtk_widget_hide (window->priv->sidebar);
-       gtk_widget_hide (window->priv->attachment_bar);
+
+       gtk_widget_grab_focus (window->priv->view);
+       gtk_window_fullscreen (GTK_WINDOW (window));
+
+       g_signal_connect (window->priv->view,
+                         "motion-notify-event",
+                         G_CALLBACK (fullscreen_motion_notify_cb),
+                         window);
+       g_signal_connect (window->priv->view,
+                         "leave-notify-event",
+                         G_CALLBACK (fullscreen_leave_notify_cb),
+                         window);
+       fullscreen_set_timeout (window);
 
        if (!ev_window_is_empty (window))
                ev_metadata_manager_set_boolean (window->priv->uri, "presentation", TRUE);
@@ -1844,12 +1833,18 @@ ev_window_stop_presentation (EvWindow *window)
        g_object_set (G_OBJECT (window->priv->scrolled_window),
                      "shadow-type", GTK_SHADOW_IN,
                      NULL);
+
        ev_view_set_presentation (EV_VIEW (window->priv->view), FALSE);
-       gtk_window_unfullscreen (GTK_WINDOW (window));
        ev_window_update_presentation_action (window);
-       update_chrome_visibility (window);
-       update_sidebar_visibility (window);
-       update_attachment_bar_visibility (window);
+       gtk_window_unfullscreen (GTK_WINDOW (window));
+
+       g_signal_handlers_disconnect_by_func (window->priv->view,
+                                             (gpointer) fullscreen_motion_notify_cb,
+                                             window);
+       g_signal_handlers_disconnect_by_func (window->priv->view,
+                                             (gpointer) fullscreen_leave_notify_cb,
+                                             window);
+       fullscreen_clear_timeout (window);
 
        if (!ev_window_is_empty (window))
                ev_metadata_manager_set_boolean (window->priv->uri, "presentation", FALSE);
@@ -1876,14 +1871,9 @@ ev_window_focus_in_event (GtkWidget *widget, GdkEventFocus *event)
 {
        EvWindow *window = EV_WINDOW (widget);
        EvWindowPrivate *priv = window->priv;
-       gboolean fullscreen;
-
-       g_object_get (priv->view,
-                     "fullscreen", &fullscreen,
-                     NULL);
 
-       if (fullscreen)
-               show_fullscreen_popup (window);
+       if (ev_view_get_fullscreen (EV_VIEW (priv->view)))
+               fullscreen_set_timeout (window);
 
        return GTK_WIDGET_CLASS (ev_window_parent_class)->focus_in_event (widget, event);
 }
@@ -1893,14 +1883,11 @@ ev_window_focus_out_event (GtkWidget *widget, GdkEventFocus *event)
 {
        EvWindow *window = EV_WINDOW (widget);
        EvWindowPrivate *priv = window->priv;
-       gboolean fullscreen;
-
-       g_object_get (priv->view,
-                     "fullscreen", &fullscreen,
-                     NULL);
 
-       if (fullscreen)
+       if (ev_view_get_fullscreen (EV_VIEW (priv->view))) {
+               fullscreen_set_timeout (window);
                gtk_widget_hide (priv->fullscreen_popup);
+       }
 
        return GTK_WIDGET_CLASS (ev_window_parent_class)->focus_out_event (widget, event);
 }
@@ -2455,7 +2442,7 @@ ev_window_view_toolbar_cb (GtkAction *action, EvWindow *ev_window)
 static void
 ev_window_view_sidebar_cb (GtkAction *action, EvWindow *ev_window)
 {
-       set_widget_visibility (ev_window->priv->sidebar,
+       update_chrome_flag (ev_window, EV_CHROME_SIDEBAR,
                               gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
 }
 
@@ -3795,14 +3782,12 @@ ev_window_init (EvWindow *ev_window)
        /* Set it user interface params */
 
        ev_window_setup_recent (ev_window);
+
        setup_chrome_from_metadata (ev_window);
        set_chrome_actions (ev_window);
        update_chrome_visibility (ev_window);
-       update_sidebar_visibility (ev_window);
-       update_attachment_bar_visibility (ev_window);
 
-       gtk_window_set_default_size (GTK_WINDOW (ev_window),
-                                    600, 600);
+       gtk_window_set_default_size (GTK_WINDOW (ev_window), 600, 600);
        setup_view_from_metadata (ev_window);
 
         ev_window_sizing_mode_changed_cb (EV_VIEW (ev_window->priv->view), NULL, ev_window);
index 6bacca59b6f5b4b5d7e62e096f150205daae2fc9..8e2473133c2763ab4084b311edc18d41c069dd5f 100644 (file)
@@ -15,9 +15,11 @@ bin_PROGRAMS=evince-thumbnailer
 evince_thumbnailer_SOURCES=    \
        evince-thumbnailer.c
 
-evince_thumbnailer_LDADD=                              \
+evince_thumbnailer_LDADD=              \
        $(top_builddir)/lib/libev.la    \
-       $(FRONTEND_LIBS)
+       $(FRONTEND_LIBS)                \
+       $(DJVU_LIBS)
+
 
 schema_files = \
        evince-thumbnailer-dvi.schemas.in  \