[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