[Xfce4-commits] [apps/xfce4-screensaver] 03/04: move job theme processing out of manager

noreply at xfce.org noreply at xfce.org
Sun Jun 30 16:13:06 CEST 2019


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

b   l   u   e   s   a   b   r   e       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/xfce4-screensaver.

commit 4929c7b5e1e94ba91e55d91fdef9fc7e9e1012d6
Author: Alexander Butenko <a.butenka at gmail.com>
Date:   Fri Jun 28 14:13:00 2019 -0400

    move job theme processing out of manager
    
    Signed-off-by: Sean Davis <smd.seandavis at gmail.com>
---
 src/Makefile.am  |   2 +
 src/gs-job.c     |  34 +++++++++++++++
 src/gs-manager.c | 128 +++++++++++--------------------------------------------
 src/gs-prefs.c   |  36 +++++++++++++---
 src/gs-prefs.h   |   1 +
 5 files changed, 93 insertions(+), 108 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index 7d0b836..0147413 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -222,6 +222,8 @@ xfce4_screensaver_preferences_SOURCES = \
 	gs-theme-manager.h                              \
 	gs-job.c                                        \
 	gs-job.h                                        \
+	gs-prefs.c                                      \
+	gs-prefs.h                                      \
 	gs-debug.c                                      \
 	gs-debug.h                                      \
 	subprocs.c                                      \
diff --git a/src/gs-job.c b/src/gs-job.c
index abd92f3..23b7f75 100644
--- a/src/gs-job.c
+++ b/src/gs-job.c
@@ -42,6 +42,8 @@
 
 #include "gs-debug.h"
 #include "gs-job.h"
+#include "gs-prefs.h"
+#include "gs-theme-manager.h"
 #include "subprocs.h"
 
 static void gs_job_class_init (GSJobClass *klass);
@@ -64,6 +66,8 @@ struct GSJobPrivate {
     guint           watch_id;
 
     char           *command;
+    GSPrefs        *prefs;
+    GSThemeManager *theme_manager;
 };
 
 G_DEFINE_TYPE_WITH_PRIVATE (GSJob, gs_job, G_TYPE_OBJECT)
@@ -89,6 +93,8 @@ gs_job_class_init (GSJobClass *klass) {
 static void
 gs_job_init (GSJob *job) {
     job->priv = gs_job_get_instance_private (job);
+    job->priv->theme_manager = gs_theme_manager_new ();
+    job->priv->prefs = gs_prefs_new();
 }
 
 /* adapted from gspawn.c */
@@ -151,6 +157,8 @@ gs_job_finalize (GObject *object) {
     g_free (job->priv->command);
     job->priv->command = NULL;
 
+    g_object_unref (job->priv->prefs);
+    g_object_unref (job->priv->theme_manager);
     G_OBJECT_CLASS (gs_job_parent_class)->finalize (object);
 }
 
@@ -171,6 +179,31 @@ gs_job_set_widget  (GSJob     *job,
     }
 }
 
+static void
+gs_job_set_theme(GSJob *job) {
+    GSThemeInfo *info;
+    const char  *theme;
+    const char  *command = NULL;
+
+    theme = gs_prefs_get_theme (job->priv->prefs);
+    if (!theme) {
+        gs_job_set_command (job, NULL);
+        return;
+    }
+    info = gs_theme_manager_lookup_theme_info (job->priv->theme_manager, theme);
+    if (info != NULL) {
+        command = gs_theme_info_get_exec (info);
+    } else {
+        gs_debug ("Could not find information for theme: %s", theme);
+    }
+
+    gs_job_set_command (job, command);
+
+    if (info != NULL) {
+        gs_theme_info_unref (info);
+    }
+}
+
 gboolean
 gs_job_set_command  (GSJob      *job,
                      const char *command) {
@@ -201,6 +234,7 @@ gs_job_new_for_widget (GtkWidget *widget) {
     job = g_object_new (GS_TYPE_JOB, NULL);
 
     gs_job_set_widget (GS_JOB (job), widget);
+    gs_job_set_theme (GS_JOB (job));
 
     return GS_JOB (job);
 }
diff --git a/src/gs-manager.c b/src/gs-manager.c
index 743fea7..e616d96 100644
--- a/src/gs-manager.c
+++ b/src/gs-manager.c
@@ -36,7 +36,6 @@
 #include "gs-job.h"
 #include "gs-manager.h"
 #include "gs-prefs.h"
-#include "gs-theme-manager.h"
 #include "gs-window.h"
 #include "xfce-bg.h"
 
@@ -48,7 +47,6 @@ struct GSManagerPrivate {
     GSList         *windows;
     GHashTable     *jobs;
 
-    GSThemeManager *theme_manager;
     XfceBG         *bg;
 
     /* Policy */
@@ -120,30 +118,6 @@ manager_add_job_for_window (GSManager *manager,
     g_hash_table_insert (manager->priv->jobs, window, job);
 }
 
-static const char *
-select_theme (GSManager *manager) {
-    const char *theme = NULL;
-
-    g_return_val_if_fail (manager != NULL, NULL);
-    g_return_val_if_fail (GS_IS_MANAGER (manager), NULL);
-
-    if (!manager->priv->prefs->saver_enabled || manager->priv->prefs->mode == GS_MODE_BLANK_ONLY) {
-        return NULL;
-    }
-
-    if (manager->priv->prefs->themes) {
-        int number = 0;
-
-        if (manager->priv->prefs->mode == GS_MODE_RANDOM) {
-            g_random_set_seed (time (NULL));
-            number = g_random_int_range (0, g_slist_length (manager->priv->prefs->themes));
-        }
-        theme = g_slist_nth_data (manager->priv->prefs->themes, number);
-    }
-
-    return theme;
-}
-
 static GSJob *
 lookup_job_for_window (GSManager *manager,
                        GSWindow  *window) {
@@ -184,56 +158,24 @@ manager_maybe_start_job_for_window (GSManager *manager,
         gs_debug ("Job not found for window");
         return;
     }
-
-    if (!manager->priv->dialog_up) {
-        if (!manager->priv->throttled) {
-            if (!gs_job_is_running (job)) {
-                if (!gs_window_is_obscured (window)) {
-                    gs_debug ("Starting job for window");
-                    gs_job_start (job);
-                } else {
-                    gs_debug ("Window is obscured deferring start of job");
-                }
-            } else {
-                gs_debug ("Not starting job because job is running");
-            }
-        } else {
-            gs_debug ("Not starting job because throttled");
-        }
-    } else {
+    if (manager->priv->dialog_up) {
         gs_debug ("Not starting job because dialog is up");
+        return;
     }
-}
-
-static void
-manager_select_theme_for_job (GSManager *manager,
-                              GSJob     *job) {
-    const char *theme;
-
-    theme = select_theme (manager);
-
-    if (theme != NULL) {
-        GSThemeInfo    *info;
-        const char     *command;
-
-        command = NULL;
-
-        info = gs_theme_manager_lookup_theme_info (manager->priv->theme_manager, theme);
-        if (info != NULL) {
-            command = gs_theme_info_get_exec (info);
-        } else {
-            gs_debug ("Could not find information for theme: %s",
-                      theme);
-        }
-
-        gs_job_set_command (job, command);
-
-        if (info != NULL) {
-            gs_theme_info_unref (info);
-        }
-    } else {
-        gs_job_set_command (job, NULL);
+    if (manager->priv->throttled) {
+        gs_debug ("Not starting job because throttled");
+        return;
+    }
+    if (gs_job_is_running (job)) {
+        gs_debug ("Not starting job because job is running");
+        return;
+    }
+    if (gs_window_is_obscured (window)) {
+        gs_debug ("Window is obscured deferring start of job");
+        return;
     }
+    gs_debug ("Starting job for window");
+    gs_job_start (job);
 }
 
 static void
@@ -241,7 +183,6 @@ cycle_job (GSWindow  *window,
            GSJob     *job,
            GSManager *manager) {
     gs_job_stop (job);
-    manager_select_theme_for_job (manager, job);
     manager_maybe_start_job_for_window (manager, window);
 }
 
@@ -396,13 +337,8 @@ gs_manager_set_saver_active (GSManager *manager,
 
 static gboolean
 activate_lock_timeout (GSManager *manager) {
-    if (manager->priv->prefs->lock_enabled &&
-            manager->priv->prefs->lock_with_saver_enabled)
-    {
-        gs_debug ("Locking screen after idling timeout");
-        gs_manager_set_lock_active (manager, TRUE);
-    }
-
+    gs_debug ("Locking screen after idling timeout");
+    gs_manager_set_lock_active (manager, TRUE);
     manager->priv->lock_timeout_id = 0;
 
     return FALSE;
@@ -419,12 +355,12 @@ remove_lock_timer (GSManager *manager) {
 static void
 add_lock_timer (GSManager *manager,
                 glong      timeout) {
+    gboolean locked;
+
     if (!manager->priv->prefs->lock_enabled)
         return;
     if (!manager->priv->prefs->lock_with_saver_enabled)
         return;
-
-    gboolean locked;
     gs_manager_get_lock_active (manager, &locked);
     if (locked)
         return;
@@ -456,20 +392,16 @@ gs_manager_cycle (GSManager *manager) {
     g_return_val_if_fail (manager != NULL, FALSE);
     g_return_val_if_fail (GS_IS_MANAGER (manager), FALSE);
 
-    gs_debug ("Cycling jobs");
-
     if (!manager->priv->active) {
         return FALSE;
     }
-
     if (manager->priv->dialog_up) {
         return FALSE;
     }
-
     if (manager->priv->throttled) {
         return FALSE;
     }
-
+    gs_debug ("Cycling jobs");
     manager_cycle_jobs (manager);
 
     return TRUE;
@@ -630,7 +562,6 @@ gs_manager_init (GSManager *manager) {
     manager->priv = gs_manager_get_instance_private (manager);
 
     manager->priv->grab = gs_grab_new ();
-    manager->priv->theme_manager = gs_theme_manager_new ();
 
     manager->priv->bg = xfce_bg_new ();
 
@@ -845,7 +776,6 @@ manager_show_window (GSManager *manager,
 
     job = gs_job_new_for_widget (gs_window_get_drawing_area (window));
 
-    manager_select_theme_for_job (manager, job);
     manager_add_job_for_window (manager, window, job);
 
     manager->priv->activate_time = time (NULL);
@@ -877,17 +807,6 @@ window_show_cb (GSWindow  *window,
 }
 
 static void
-maybe_set_window_throttle (GSManager *manager,
-                           GSWindow  *window,
-                           gboolean   throttled) {
-    if (throttled) {
-        manager_maybe_stop_job_for_window (manager, window);
-    } else {
-        manager_maybe_start_job_for_window (manager, window);
-    }
-}
-
-static void
 window_obscured_cb (GSWindow   *window,
                     GParamSpec *pspec,
                     GSManager  *manager) {
@@ -896,7 +815,11 @@ window_obscured_cb (GSWindow   *window,
     obscured = gs_window_is_obscured (window);
     gs_debug ("Handling window obscured: %s", obscured ? "obscured" : "unobscured");
 
-    maybe_set_window_throttle (manager, window, obscured);
+    if (obscured) {
+        manager_maybe_stop_job_for_window (manager, window);
+    } else {
+        manager_maybe_start_job_for_window (manager, window);
+    }
 }
 
 static void
@@ -1155,7 +1078,6 @@ gs_manager_finalize (GObject *object) {
     manager->priv->activate_time = 0;
 
     g_object_unref (manager->priv->grab);
-    g_object_unref (manager->priv->theme_manager);
 
     G_OBJECT_CLASS (gs_manager_parent_class)->finalize (object);
 }
diff --git a/src/gs-prefs.c b/src/gs-prefs.c
index c8c09c0..cad833a 100644
--- a/src/gs-prefs.c
+++ b/src/gs-prefs.c
@@ -37,6 +37,8 @@ static void gs_prefs_class_init (GSPrefsClass *klass);
 static void gs_prefs_init       (GSPrefs      *prefs);
 static void gs_prefs_finalize   (GObject      *object);
 
+static GSPrefs *prefs;
+
 struct GSPrefsPrivate {
     XfconfChannel *channel;
     XfconfChannel *xfpm_channel;
@@ -148,6 +150,27 @@ _gs_prefs_set_mode (GSPrefs    *prefs,
     prefs->mode = mode;
 }
 
+const char *
+gs_prefs_get_theme (GSPrefs *prefs) {
+    const char *theme = NULL;
+
+    if (!prefs->saver_enabled || prefs->mode == GS_MODE_BLANK_ONLY) {
+        return NULL;
+    }
+
+    if (prefs->themes) {
+        int number = 0;
+
+        if (prefs->mode == GS_MODE_RANDOM) {
+            g_random_set_seed (time (NULL));
+            number = g_random_int_range (0, g_slist_length (prefs->themes));
+        }
+        theme = g_slist_nth_data (prefs->themes, number);
+    }
+
+    return theme;
+}
+
 static void
 _gs_prefs_set_themes (GSPrefs  *prefs,
                       gchar   **values) {
@@ -527,9 +550,12 @@ gs_prefs_finalize (GObject *object) {
 
 GSPrefs *
 gs_prefs_new (void) {
-    GObject *prefs;
-
-    prefs = g_object_new (GS_TYPE_PREFS, NULL);
-
-    return GS_PREFS (prefs);
+    GObject *object;
+    if (!prefs) {
+        object = g_object_new (GS_TYPE_PREFS, NULL);
+        prefs = GS_PREFS (object);
+    } else
+       object = g_object_ref (G_OBJECT (prefs));
+
+    return GS_PREFS (object);
 }
diff --git a/src/gs-prefs.h b/src/gs-prefs.h
index 717c766..42bc1c5 100644
--- a/src/gs-prefs.h
+++ b/src/gs-prefs.h
@@ -218,6 +218,7 @@ typedef struct
 GType       gs_prefs_get_type        (void);
 GSPrefs   * gs_prefs_new             (void);
 void        gs_prefs_load            (GSPrefs *prefs);
+const char* gs_prefs_get_theme       (GSPrefs *prefs);
 
 G_END_DECLS
 

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


More information about the Xfce4-commits mailing list