[Xfce4-commits] [apps/ristretto] 01/01: Add inactivity timeout setting to Preferences

noreply at xfce.org noreply at xfce.org
Tue Sep 10 18:44:53 CEST 2019


This is an automated email from the git hooks/post-receive script.

f   2   4   0   4       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/ristretto.

commit a3fd5163eb57af4e7e5b7290fefedbdb1939b548
Author: Igor <f2404 at yandex.ru>
Date:   Tue Sep 10 12:42:11 2019 -0400

    Add inactivity timeout setting to Preferences
    
    This allows to set the period of inactivity after which the mouse cursor
    will be hidden in fullscreen mode. When set to 0, the cursor will never
    be hidden.
---
 src/main_window.c        | 30 +++++++++++++++-------
 src/preferences_dialog.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++--
 src/settings.c           | 29 +++++++++++++++++++++
 3 files changed, 115 insertions(+), 11 deletions(-)

diff --git a/src/main_window.c b/src/main_window.c
index 75e2ffe..43cedd9 100644
--- a/src/main_window.c
+++ b/src/main_window.c
@@ -2414,6 +2414,9 @@ cb_rstto_main_window_state_event (GtkWidget *widget, GdkEventWindowState *event,
     {
         if (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)
         {
+            guint timeout = rstto_settings_get_uint_property (RSTTO_SETTINGS (window->priv->settings_manager),
+                                                              "hide-mouse-cursor-fullscreen-timeout");
+
             rstto_image_viewer_set_show_clock (
                     RSTTO_IMAGE_VIEWER (window->priv->image_viewer),
                     rstto_settings_get_boolean_property (window->priv->settings_manager, "show-clock"));
@@ -2444,10 +2447,13 @@ cb_rstto_main_window_state_event (GtkWidget *widget, GdkEventWindowState *event,
                 }
             }
 
-            window->priv->show_fs_mouse_cursor_timeout_id =
-                    g_timeout_add_full (G_PRIORITY_DEFAULT, 500,
-                                        (GSourceFunc) cb_rstto_main_window_show_fs_mouse_cursor_timeout, window,
-                                        cb_rstto_main_window_show_fs_mouse_cursor_timeout_destroy);
+            if (timeout > 0)
+            {
+                window->priv->show_fs_mouse_cursor_timeout_id =
+                        g_timeout_add_full (G_PRIORITY_DEFAULT, 1000 * timeout,
+                                            (GSourceFunc) cb_rstto_main_window_show_fs_mouse_cursor_timeout, window,
+                                            cb_rstto_main_window_show_fs_mouse_cursor_timeout_destroy);
+            }
 
             if (rstto_settings_get_boolean_property (window->priv->settings_manager, "hide-thumbnails-fullscreen"))
             {
@@ -2556,6 +2562,9 @@ cb_rstto_main_window_motion_notify_event (RsttoMainWindow *window, GdkEventMotio
 {
     if (gdk_window_get_state (gtk_widget_get_window (GTK_WIDGET (window))) & GDK_WINDOW_STATE_FULLSCREEN)
     {
+        guint timeout = rstto_settings_get_uint_property (RSTTO_SETTINGS (window->priv->settings_manager),
+                                                          "hide-mouse-cursor-fullscreen-timeout");
+
         /* Show toolbar when the mouse pointer is moved to the top of the screen */
         if (event->y < 1)
         {
@@ -2571,7 +2580,7 @@ cb_rstto_main_window_motion_notify_event (RsttoMainWindow *window, GdkEventMotio
             }
         }
 
-        /* Show the mouse cursor, but set a timer to hide it in 1 second if not moved again */
+        /* Show the mouse cursor, but set a timer to hide it if not moved again */
         if (window->priv->show_fs_mouse_cursor_timeout_id > 0)
         {
             REMOVE_SOURCE (window->priv->show_fs_mouse_cursor_timeout_id);
@@ -2581,10 +2590,13 @@ cb_rstto_main_window_motion_notify_event (RsttoMainWindow *window, GdkEventMotio
             gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), NULL);
         }
 
-        window->priv->show_fs_mouse_cursor_timeout_id =
-                g_timeout_add_full (G_PRIORITY_DEFAULT, 1000,
-                                    (GSourceFunc) cb_rstto_main_window_show_fs_mouse_cursor_timeout, window,
-                                    cb_rstto_main_window_show_fs_mouse_cursor_timeout_destroy);
+        if (timeout > 0)
+        {
+            window->priv->show_fs_mouse_cursor_timeout_id =
+                    g_timeout_add_full (G_PRIORITY_DEFAULT, 1000 * timeout,
+                                        (GSourceFunc) cb_rstto_main_window_show_fs_mouse_cursor_timeout, window,
+                                        cb_rstto_main_window_show_fs_mouse_cursor_timeout_destroy);
+        }
     }
     return TRUE;
 }
diff --git a/src/preferences_dialog.c b/src/preferences_dialog.c
index ff3ef6e..314261b 100644
--- a/src/preferences_dialog.c
+++ b/src/preferences_dialog.c
@@ -65,6 +65,10 @@ cb_show_clock_check_button_toggled (
         GtkToggleButton *button, 
         gpointer user_data);
 static void
+cb_cursor_timeout_button_value_changed (
+        GtkSpinButton *spin_button,
+        gpointer user_data);
+static void
 cb_limit_quality_check_button_toggled (
         GtkToggleButton *button, 
         gpointer user_data);
@@ -123,6 +127,13 @@ struct _RsttoPreferencesDialogPriv
         GtkWidget *clock_frame;
         GtkWidget *clock_label;
         GtkWidget *clock_button;
+
+        GtkWidget *cursor_vbox;
+        GtkWidget *cursor_frame;
+        GtkWidget *cursor_label;
+        GtkWidget *cursor_hbox;
+        GtkWidget *cursor_timeout_label;
+        GtkWidget *cursor_timeout_button;
     } fullscreen_tab;
 
     struct
@@ -223,6 +234,7 @@ rstto_preferences_dialog_init (RsttoPreferencesDialog *dialog)
     gboolean   bool_bgcolor_override;
     guint      uint_slideshow_timeout;
     gboolean   bool_hide_thumbnails_fullscreen;
+    guint      uint_hide_mouse_cursor_fullscreen_timeout;
     gboolean   bool_wrap_images;
     gboolean   bool_maximize_on_startup;
     gboolean   bool_show_clock;
@@ -262,6 +274,7 @@ rstto_preferences_dialog_init (RsttoPreferencesDialog *dialog)
             "bgcolor", &bgcolor,
             "slideshow-timeout", &uint_slideshow_timeout,
             "hide-thumbnails-fullscreen", &bool_hide_thumbnails_fullscreen,
+            "hide-mouse-cursor-fullscreen-timeout", &uint_hide_mouse_cursor_fullscreen_timeout,
             "maximize-on-startup", &bool_maximize_on_startup,
             "wrap-images", &bool_wrap_images,
             "desktop-type", &str_desktop_type,
@@ -362,10 +375,31 @@ rstto_preferences_dialog_init (RsttoPreferencesDialog *dialog)
     gtk_container_add (GTK_CONTAINER (dialog->priv->fullscreen_tab.clock_vbox), dialog->priv->fullscreen_tab.clock_button);
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->fullscreen_tab.clock_button), bool_show_clock);
 
-    g_signal_connect (G_OBJECT (dialog->priv->fullscreen_tab.hide_thumbnails_fullscreen_check_button), 
+    dialog->priv->fullscreen_tab.cursor_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+    dialog->priv->fullscreen_tab.cursor_frame = xfce_gtk_frame_box_new_with_content (_("Mouse cursor"), dialog->priv->fullscreen_tab.cursor_vbox);
+    gtk_box_pack_start (GTK_BOX (fullscreen_main_vbox), dialog->priv->fullscreen_tab.cursor_frame, FALSE, FALSE, 0);
+
+    dialog->priv->fullscreen_tab.cursor_label = gtk_label_new (_("The mouse cursor can be automatically hidden after a certain period of inactivity\nwhen the window is fullscreen."));
+    gtk_label_set_line_wrap (GTK_LABEL (dialog->priv->fullscreen_tab.cursor_label), TRUE);
+    gtk_label_set_xalign (GTK_LABEL (dialog->priv->fullscreen_tab.cursor_label), 0.0);
+    gtk_label_set_yalign (GTK_LABEL (dialog->priv->fullscreen_tab.cursor_label), 0.5);
+    gtk_container_add (GTK_CONTAINER (dialog->priv->fullscreen_tab.cursor_vbox), dialog->priv->fullscreen_tab.cursor_label);
+
+    dialog->priv->fullscreen_tab.cursor_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+    dialog->priv->fullscreen_tab.cursor_timeout_label = gtk_label_new (_("Period of inactivity (seconds):"));
+    dialog->priv->fullscreen_tab.cursor_timeout_button = gtk_spin_button_new_with_range (0, 3600, 1);
+    gtk_spin_button_set_digits (GTK_SPIN_BUTTON (dialog->priv->fullscreen_tab.cursor_timeout_button), 0);
+    gtk_container_add (GTK_CONTAINER (dialog->priv->fullscreen_tab.cursor_hbox), dialog->priv->fullscreen_tab.cursor_timeout_label);
+    gtk_container_add (GTK_CONTAINER (dialog->priv->fullscreen_tab.cursor_hbox), dialog->priv->fullscreen_tab.cursor_timeout_button);
+    gtk_container_add (GTK_CONTAINER (dialog->priv->fullscreen_tab.cursor_vbox), dialog->priv->fullscreen_tab.cursor_hbox);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->fullscreen_tab.cursor_timeout_button), uint_hide_mouse_cursor_fullscreen_timeout);
+
+    g_signal_connect (G_OBJECT (dialog->priv->fullscreen_tab.hide_thumbnails_fullscreen_check_button),
                       "toggled", G_CALLBACK (cb_hide_thumbnails_fullscreen_check_button_toggled), dialog);
-    g_signal_connect (G_OBJECT (dialog->priv->fullscreen_tab.clock_button), 
+    g_signal_connect (G_OBJECT (dialog->priv->fullscreen_tab.clock_button),
                       "toggled", G_CALLBACK (cb_show_clock_check_button_toggled), dialog);
+    g_signal_connect (G_OBJECT (dialog->priv->fullscreen_tab.cursor_timeout_button),
+                      "value-changed", G_CALLBACK (cb_cursor_timeout_button_value_changed), dialog);
 
     /*
      * Slideshow tab
@@ -921,6 +955,35 @@ cb_show_clock_check_button_toggled (
 }
 
 /**
+ * cb_cursor_timeout_button_value_changed:
+ * @button:    The spin-button the user changed value for.
+ * @user_data: The user-data provided when connecting the
+ *             callback-function, the preferences-dialog.
+ *
+ *
+ * This function is called when a user changes the inactivity
+ * timeout via the spin-button. This function then sets the right
+ * property in the ristretto settings container.
+ *
+ * When the property's value is greater than 0, it will serve as
+ * an inactivity timeout to hide the mouse cursor when in
+ * fullscreen mode.
+ */
+static void
+cb_cursor_timeout_button_value_changed (
+        GtkSpinButton *spin_button,
+        gpointer user_data)
+{
+    RsttoPreferencesDialog *dialog = RSTTO_PREFERENCES_DIALOG (user_data);
+    gdouble value = gtk_spin_button_get_value (spin_button);
+
+    rstto_settings_set_uint_property (
+            dialog->priv->settings,
+            "hide-mouse-cursor-fullscreen-timeout",
+            value > 0 ? (guint) value : 0);
+}
+
+/**
  * cb_limit_quality_check_button_toggled:
  * @button:    The check-button the user clicked.
  * @user_data: The user-data provided when connecting the
diff --git a/src/settings.c b/src/settings.c
index 64c4e87..c16a0fa 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -66,6 +66,7 @@ enum
     PROP_SHOW_CLOCK,
     PROP_LIMIT_QUALITY,
     PROP_HIDE_THUMBNAILS_FULLSCREEN,
+    PROP_HIDE_MOUSE_CURSOR_FULLSCREEN_TIMEOUT,
     PROP_WINDOW_WIDTH,
     PROP_WINDOW_HEIGHT,
     PROP_BGCOLOR,
@@ -119,6 +120,7 @@ struct _RsttoSettingsPriv
     gboolean  show_clock;
     gboolean  limit_quality;
     gboolean  hide_thumbnails_fullscreen;
+    guint     hide_mouse_cursor_fullscreen_timeout;
     gchar    *navigationbar_position;
     gboolean  invert_zoom_direction;
     guint     window_width;
@@ -191,6 +193,7 @@ rstto_settings_init (GObject *object)
     settings->priv->use_thunar_properties = TRUE;
     settings->priv->maximize_on_startup = TRUE;
     settings->priv->hide_thumbnails_fullscreen = TRUE;
+    settings->priv->hide_mouse_cursor_fullscreen_timeout = 1;
     settings->priv->errors.missing_thumbnailer = TRUE;
     settings->priv->thumbnail_size = THUMBNAIL_SIZE_NORMAL;
 
@@ -265,6 +268,13 @@ rstto_settings_init (GObject *object)
 
     xfconf_g_property_bind (
             settings->priv->channel,
+            "/window/mouse-cursor/hide-fullscreen-timeout",
+            G_TYPE_UINT,
+            settings,
+            "hide-mouse-cursor-fullscreen-timeout");
+
+    xfconf_g_property_bind (
+            settings->priv->channel,
             "/slideshow/timeout",
             G_TYPE_UINT,
             settings,
@@ -457,6 +467,19 @@ rstto_settings_class_init (GObjectClass *object_class)
             PROP_HIDE_THUMBNAILS_FULLSCREEN,
             pspec);
 
+    pspec = g_param_spec_uint (
+            "hide-mouse-cursor-fullscreen-timeout",
+            "",
+            "",
+            0,
+            3600,
+            1,
+            G_PARAM_READWRITE);
+    g_object_class_install_property (
+            object_class,
+            PROP_HIDE_MOUSE_CURSOR_FULLSCREEN_TIMEOUT,
+            pspec);
+
     pspec = g_param_spec_string (
             "navigationbar-position",
             "",
@@ -777,6 +800,9 @@ rstto_settings_set_property    (GObject      *object,
         case PROP_HIDE_THUMBNAILS_FULLSCREEN:
             settings->priv->hide_thumbnails_fullscreen = g_value_get_boolean (value);
             break;
+        case PROP_HIDE_MOUSE_CURSOR_FULLSCREEN_TIMEOUT:
+            settings->priv->hide_mouse_cursor_fullscreen_timeout = g_value_get_uint (value);
+            break;
         case PROP_NAVBAR_POSITION:
             str_val = g_value_get_string (value);
 
@@ -881,6 +907,9 @@ rstto_settings_get_property    (GObject    *object,
         case PROP_HIDE_THUMBNAILS_FULLSCREEN:
             g_value_set_boolean (value, settings->priv->hide_thumbnails_fullscreen);
             break;
+        case PROP_HIDE_MOUSE_CURSOR_FULLSCREEN_TIMEOUT:
+            g_value_set_uint (value, settings->priv->hide_mouse_cursor_fullscreen_timeout);
+            break;
         case PROP_NAVBAR_POSITION:
             g_value_set_string (value, settings->priv->navigationbar_position);
             break;

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list