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

bluesabre pushed a 
commit to branch 
master
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

Reply via email to