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.seanda...@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. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits