[Xfce4-commits] [apps/xfce4-screensaver] 382/425: Fix background pulling for different monitors
noreply at xfce.org
noreply at xfce.org
Mon Oct 15 01:53:49 CEST 2018
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 0f7955d344f77c70cae4d21c2a2502d208e84f90
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Mon Oct 8 21:37:20 2018 -0400
Fix background pulling for different monitors
---
src/gs-lock-plug.c | 91 +++++++++++++++++++++++++++++++++---------
src/gs-window-x11.c | 18 +++++++++
src/xfce4-screensaver-dialog.c | 4 ++
3 files changed, 95 insertions(+), 18 deletions(-)
diff --git a/src/gs-lock-plug.c b/src/gs-lock-plug.c
index 66e7236..bfae612 100644
--- a/src/gs-lock-plug.c
+++ b/src/gs-lock-plug.c
@@ -70,10 +70,11 @@ enum
#define DIALOG_TIMEOUT_MSEC 60000
static void gs_lock_plug_finalize (GObject *object);
+static void redraw_background (GSLockPlug *plug);
#define GS_LOCK_PLUG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_LOCK_PLUG, GSLockPlugPrivate))
-struct GSLockPlugPrivate
+ struct GSLockPlugPrivate
{
GtkWidget *vbox;
GtkWidget *auth_action_area;
@@ -88,6 +89,7 @@ struct GSLockPlugPrivate
GtkWidget *auth_capslock_label;
GtkWidget *auth_message_label;
GtkWidget *status_message_label;
+ GtkWidget *background_image;
GtkWidget *auth_unlock_button;
GtkWidget *auth_switch_button;
@@ -109,6 +111,8 @@ struct GSLockPlugPrivate
guint auth_check_idle_id;
guint response_idle_id;
+ gint monitor_index;
+
GList *key_events;
};
@@ -133,7 +137,8 @@ enum
PROP_LOGOUT_ENABLED,
PROP_LOGOUT_COMMAND,
PROP_SWITCH_ENABLED,
- PROP_STATUS_MESSAGE
+ PROP_STATUS_MESSAGE,
+ PROP_MONITOR_INDEX
};
static guint lock_plug_signals [LAST_SIGNAL] = { 0 };
@@ -1073,6 +1078,23 @@ gs_lock_plug_set_logout_enabled (GSLockPlug *plug,
}
static void
+gs_lock_plug_set_monitor_index (GSLockPlug *plug,
+ gint monitor_index)
+{
+ g_return_if_fail (GS_LOCK_PLUG (plug));
+
+ if (plug->priv->monitor_index == monitor_index)
+ {
+ return;
+ }
+
+ plug->priv->monitor_index = monitor_index;
+ g_object_notify (G_OBJECT (plug), "monitor-index");
+
+ redraw_background (plug);
+}
+
+static void
gs_lock_plug_set_logout_command (GSLockPlug *plug,
const char *command)
{
@@ -1138,6 +1160,9 @@ gs_lock_plug_get_property (GObject *object,
case PROP_STATUS_MESSAGE:
g_value_set_string (value, self->priv->status_message);
break;
+ case PROP_MONITOR_INDEX:
+ g_value_set_int (value, self->priv->monitor_index);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1216,6 +1241,9 @@ gs_lock_plug_set_property (GObject *object,
case PROP_SWITCH_ENABLED:
gs_lock_plug_set_switch_enabled (self, g_value_get_boolean (value));
break;
+ case PROP_MONITOR_INDEX:
+ gs_lock_plug_set_monitor_index (self, g_value_get_int (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1303,6 +1331,15 @@ gs_lock_plug_class_init (GSLockPlugClass *klass)
NULL,
FALSE,
G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_MONITOR_INDEX,
+ g_param_spec_int ("monitor-index",
+ NULL,
+ NULL,
+ 0,
+ 200,
+ 0,
+ G_PARAM_READWRITE));
binding_set = gtk_binding_set_by_class (klass);
@@ -1882,10 +1919,17 @@ get_draw_dimensions(GSLockPlug *plug,
}
screen = gdk_display_get_default_screen(display);
scale = gdk_window_get_scale_factor(gdk_screen_get_root_window(screen));
- if (window != NULL) {
- monitor = gdk_display_get_monitor_at_window(display, window);
- } else {
- monitor = gdk_display_get_primary_monitor (display);
+
+ monitor = gdk_display_get_monitor (display, plug->priv->monitor_index);
+ if (!monitor)
+ {
+ if (window != NULL)
+ monitor = gdk_display_get_monitor_at_window(display, window);
+ else
+ monitor = gdk_display_get_primary_monitor(display);
+
+ if (!monitor)
+ monitor = gdk_display_get_monitor (display, 0);
}
xfce_bg_load_from_preferences(bg, monitor);
@@ -1897,6 +1941,26 @@ get_draw_dimensions(GSLockPlug *plug,
*screen_height = HeightOfScreen(gdk_x11_screen_get_xscreen(screen)) / scale;
}
+static void
+redraw_background (GSLockPlug *plug)
+{
+ XfceBG *bg;
+ GdkPixbuf *pixbuf;
+ gint screen_width, screen_height, monitor_width, monitor_height;
+
+ pixbuf = gtk_image_get_pixbuf (GTK_IMAGE (plug->priv->background_image));
+ if (pixbuf)
+ {
+ g_free(pixbuf);
+ pixbuf = NULL;
+ }
+
+ bg = xfce_bg_new();
+ get_draw_dimensions(plug, bg, &screen_width, &screen_height, &monitor_width, &monitor_height);
+ pixbuf = xfce_bg_get_pixbuf(bg, screen_width, screen_height, monitor_width, monitor_height);
+ gtk_image_set_from_pixbuf(GTK_IMAGE(plug->priv->background_image), pixbuf);
+}
+
static gboolean
load_theme (GSLockPlug *plug)
{
@@ -1908,13 +1972,8 @@ load_theme (GSLockPlug *plug)
GtkWidget *lock_overlay;
GtkWidget *lock_panel;
GtkWidget *lock_dialog;
- GtkWidget *bg_image;
GError *error=NULL;
- XfceBG *bg;
- GdkPixbuf *pixbuf;
- gint screen_width, screen_height, monitor_width, monitor_height;
-
theme = get_dialog_theme_name (plug);
if (theme == NULL)
{
@@ -1953,13 +2012,6 @@ load_theme (GSLockPlug *plug)
}
g_free (gtkbuilder);
- bg_image = GTK_WIDGET (gtk_builder_get_object(builder, "lock-image"));
-
- bg = xfce_bg_new();
- get_draw_dimensions(plug, bg, &screen_width, &screen_height, &monitor_width, &monitor_height);
- pixbuf = xfce_bg_get_pixbuf(bg, screen_width, screen_height, monitor_width, monitor_height);
- gtk_image_set_from_pixbuf (GTK_IMAGE(bg_image), pixbuf);
-
lock_overlay = GTK_WIDGET(gtk_builder_get_object(builder, "lock-overlay"));
lock_panel = GTK_WIDGET(gtk_builder_get_object(builder, "lock-panel"));
lock_dialog = GTK_WIDGET(gtk_builder_get_object(builder, "lock-dialog"));
@@ -1990,6 +2042,7 @@ load_theme (GSLockPlug *plug)
plug->priv->auth_cancel_button = GTK_WIDGET (gtk_builder_get_object(builder, "auth-cancel-button"));
plug->priv->auth_logout_button = GTK_WIDGET (gtk_builder_get_object(builder, "auth-logout-button"));
plug->priv->auth_switch_button = GTK_WIDGET (gtk_builder_get_object(builder, "auth-switch-button"));
+ plug->priv->background_image = GTK_WIDGET (gtk_builder_get_object(builder, "lock-image"));
/* Placeholder for the keyboard indicator */
plug->priv->auth_prompt_kbd_layout_indicator = GTK_WIDGET (gtk_builder_get_object(builder, "auth-prompt-kbd-layout-indicator"));
@@ -2002,6 +2055,8 @@ load_theme (GSLockPlug *plug)
gtk_widget_set_no_show_all (plug->priv->auth_switch_button, TRUE);
}
+ redraw_background (plug);
+
date_time_update (plug);
gtk_widget_show_all (lock_dialog);
diff --git a/src/gs-window-x11.c b/src/gs-window-x11.c
index bc9c333..9a7cdc1 100644
--- a/src/gs-window-x11.c
+++ b/src/gs-window-x11.c
@@ -1682,6 +1682,23 @@ is_user_switch_enabled (GSWindow *window)
return window->priv->user_switch_enabled;
}
+static gint
+get_monitor_index (GSWindow *window)
+{
+ GdkDisplay *display = gs_window_get_display (window);
+ GdkMonitor *monitor;
+ gint idx;
+
+ for (idx = 0; idx < gdk_display_get_n_monitors (display); idx++) {
+ monitor = gdk_display_get_monitor (display, idx);
+ if (g_strcmp0 (gdk_monitor_get_model (monitor), gdk_monitor_get_model (window->priv->monitor)) == 0) {
+ return idx;
+ }
+ }
+
+ return 0;
+}
+
static void
popup_dialog (GSWindow *window)
{
@@ -1695,6 +1712,7 @@ popup_dialog (GSWindow *window)
command = g_string_new (tmp);
g_free (tmp);
+ g_string_append_printf(command, " --monitor='%i'", get_monitor_index (window));
g_string_append_printf(command, " --height='%i'", window->priv->geometry.height);
g_string_append_printf(command, " --width='%i'", window->priv->geometry.width);
diff --git a/src/xfce4-screensaver-dialog.c b/src/xfce4-screensaver-dialog.c
index f464628..90aa077 100644
--- a/src/xfce4-screensaver-dialog.c
+++ b/src/xfce4-screensaver-dialog.c
@@ -56,6 +56,7 @@ static gint dialog_width = 0;
static char* logout_command = NULL;
static char* status_message = NULL;
static char* away_message = NULL;
+static gint monitor_index = 0;
static GOptionEntry entries[] = {
{"verbose", 0, 0, G_OPTION_ARG_NONE, &verbose, N_("Show debugging output"), NULL},
@@ -67,6 +68,7 @@ static GOptionEntry entries[] = {
{"away-message", 0, 0, G_OPTION_ARG_STRING, &away_message, N_("Not used"), N_("MESSAGE")},
{"height", 0, 0, G_OPTION_ARG_INT, &dialog_height, N_("Monitor height"), NULL},
{"width", 0, 0, G_OPTION_ARG_INT, &dialog_width, N_("Monitor width"), NULL},
+ {"monitor", 0, 0, G_OPTION_ARG_INT, &monitor_index, N_("Monitor index"), NULL},
{NULL}
};
@@ -410,6 +412,8 @@ static gboolean popup_dialog_idle(void)
g_object_set(widget, "status-message", status_message, NULL);
}
+ g_object_set(widget, "monitor-index", monitor_index, NULL);
+
gtk_widget_set_size_request(widget, dialog_width, dialog_height);
g_signal_connect(GS_LOCK_PLUG(widget), "response", G_CALLBACK(response_cb), NULL);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list