[Xfce4-commits] [apps/xfce4-screensaver] 02/02: Enable on-screen keyboard overlay, improve wallpaper drawing at 2x scale

noreply at xfce.org noreply at xfce.org
Sun Jul 7 18:22:40 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 3033763497c43bcd88cf8bd7350c0046ab09ea43
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Jul 7 12:22:31 2019 -0400

    Enable on-screen keyboard overlay, improve wallpaper drawing at 2x scale
---
 src/gs-lock-plug.c                   |  20 +++---
 src/gs-window-x11.c                  |  54 +++++++++++---
 src/xfce-bg.c                        | 134 +----------------------------------
 src/xfce-bg.h                        |  10 +--
 src/xfce4-screensaver-preferences.ui |   8 +--
 5 files changed, 64 insertions(+), 162 deletions(-)

diff --git a/src/gs-lock-plug.c b/src/gs-lock-plug.c
index 784e88a..e74fcac 100644
--- a/src/gs-lock-plug.c
+++ b/src/gs-lock-plug.c
@@ -1529,13 +1529,13 @@ get_draw_dimensions(GSLockPlug *plug,
                     gint       *screen_width,
                     gint       *screen_height,
                     gint       *monitor_width,
-                    gint       *monitor_height) {
+                    gint       *monitor_height,
+                    gint       *scale) {
     GdkWindow    *window;
     GdkDisplay   *display;
     GdkScreen    *screen;
     GdkMonitor   *monitor;
     GdkRectangle  geometry;
-    gint          scale;
 
     window = gtk_widget_get_window (GTK_WIDGET(plug));
     if (window != NULL) {
@@ -1544,7 +1544,7 @@ get_draw_dimensions(GSLockPlug *plug,
         display = gdk_display_get_default();
     }
     screen = gdk_display_get_default_screen(display);
-    scale = gdk_window_get_scale_factor(gdk_screen_get_root_window(screen));
+    *scale = gdk_window_get_scale_factor(gdk_screen_get_root_window(screen));
 
     monitor = gdk_display_get_monitor (display, plug->priv->monitor_index);
     if (!monitor) {
@@ -1560,22 +1560,22 @@ get_draw_dimensions(GSLockPlug *plug,
     xfce_bg_load_from_preferences(bg, monitor);
 
     gdk_monitor_get_geometry(monitor, &geometry);
-    *monitor_width = geometry.width / scale;
-    *monitor_height = geometry.height / scale;
-    *screen_width = WidthOfScreen(gdk_x11_screen_get_xscreen(screen)) / scale;
-    *screen_height = HeightOfScreen(gdk_x11_screen_get_xscreen(screen)) / scale;
+    *monitor_width = geometry.width;
+    *monitor_height = geometry.height;
+    *screen_width = WidthOfScreen(gdk_x11_screen_get_xscreen(screen));
+    *screen_height = HeightOfScreen(gdk_x11_screen_get_xscreen(screen));
 }
 
 static void
 redraw_background (GSLockPlug *plug) {
     XfceBG    *bg;
     GdkPixbuf *pixbuf;
-    gint       screen_width, screen_height, monitor_width, monitor_height;
+    gint       screen_width, screen_height, monitor_width, monitor_height, scale;
 
     gs_debug ("Redrawing background");
     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);
+    get_draw_dimensions(plug, bg, &screen_width, &screen_height, &monitor_width, &monitor_height, &scale);
+    pixbuf = xfce_bg_get_pixbuf(bg, screen_width, screen_height, monitor_width, monitor_height, scale);
     gtk_image_set_from_pixbuf(GTK_IMAGE(plug->priv->background_image), pixbuf);
 }
 
diff --git a/src/gs-window-x11.c b/src/gs-window-x11.c
index 60ce0af..363183e 100644
--- a/src/gs-window-x11.c
+++ b/src/gs-window-x11.c
@@ -74,6 +74,7 @@ struct GSWindowPrivate {
     GSPrefs         *prefs;
 
     GtkWidget       *vbox;
+    GtkWidget       *overlay;
     GtkWidget       *drawing_area;
     GtkWidget       *lock_box;
     GtkWidget       *lock_socket;
@@ -1022,9 +1023,12 @@ static gboolean
 lock_plug_removed (GtkWidget *widget,
                    GSWindow  *window) {
     gtk_widget_hide (widget);
-    gtk_container_remove (GTK_CONTAINER (window->priv->vbox), GTK_WIDGET (window->priv->lock_box));
+    gtk_container_remove (GTK_CONTAINER (window->priv->overlay), GTK_WIDGET (window->priv->lock_box));
     window->priv->lock_box = NULL;
 
+    gtk_container_remove (GTK_CONTAINER (window->priv->vbox), GTK_WIDGET (window->priv->overlay));
+    window->priv->overlay = NULL;
+
     return TRUE;
 }
 
@@ -1038,7 +1042,7 @@ static gboolean
 keyboard_plug_removed (GtkWidget *widget,
                        GSWindow  *window) {
     gtk_widget_hide (widget);
-    gtk_container_remove (GTK_CONTAINER (window->priv->vbox), GTK_WIDGET (window->priv->keyboard_socket));
+    gtk_container_remove (GTK_CONTAINER (window->priv->overlay), GTK_WIDGET (window->priv->keyboard_socket));
 
     return TRUE;
 }
@@ -1104,12 +1108,36 @@ lock_socket_destroyed (GtkWidget *widget,
 static void
 create_keyboard_socket (GSWindow *window,
                         guint32   id) {
-    int height;
+    GdkDisplay   *display;
+    GdkMonitor   *monitor;
+    GdkWindow    *g_window;
+    GdkRectangle  geometry;
+    gint screen_height, screen_width;
+    gint height, width;
+
+    g_window = gtk_widget_get_window (GTK_WIDGET (window));
+    display = gdk_window_get_display (g_window);
+    monitor = gdk_display_get_monitor_at_window (display, g_window);
+    gdk_monitor_get_geometry (monitor, &geometry);
+
+    screen_height = geometry.height;
+    if (screen_height < 610) {
+        height = 205 - ((610 - screen_height) / 2); // Approximate, based on Greybird
+    } else {
+        height = 205; // Native height for onboard
+    }
 
-    height = (HeightOfScreen (gdk_x11_screen_get_xscreen (gtk_widget_get_screen (GTK_WIDGET (window))))) / 4;
+    screen_width = geometry.width;
+    if (screen_width < 1400) {
+        width = screen_width;
+    } else {
+        width = 1400; // Native width for onboard
+    }
 
     window->priv->keyboard_socket = gtk_socket_new ();
-    gtk_widget_set_size_request (window->priv->keyboard_socket, -1, height);
+    gtk_widget_set_size_request (window->priv->keyboard_socket, width, height);
+    gtk_widget_set_halign (window->priv->keyboard_socket, GTK_ALIGN_CENTER);
+    gtk_widget_set_valign (window->priv->keyboard_socket, GTK_ALIGN_END);
 
     g_signal_connect (window->priv->keyboard_socket, "destroy",
                       G_CALLBACK (keyboard_socket_destroyed), window);
@@ -1117,7 +1145,8 @@ create_keyboard_socket (GSWindow *window,
                       G_CALLBACK (keyboard_plug_added), window);
     g_signal_connect (window->priv->keyboard_socket, "plug_removed",
                       G_CALLBACK (keyboard_plug_removed), window);
-    gtk_box_pack_start (GTK_BOX (window->priv->vbox), window->priv->keyboard_socket, FALSE, FALSE, 0);
+
+    gtk_overlay_add_overlay (GTK_OVERLAY (window->priv->overlay), window->priv->keyboard_socket);
     gtk_socket_add_id (GTK_SOCKET (window->priv->keyboard_socket), id);
 }
 
@@ -1262,7 +1291,11 @@ create_lock_socket (GSWindow *window,
     gtk_widget_set_valign (GTK_WIDGET (window->priv->lock_box),
                            GTK_ALIGN_CENTER);
     gtk_widget_show (window->priv->lock_box);
-    gtk_box_pack_start (GTK_BOX (window->priv->vbox), window->priv->lock_box, TRUE, TRUE, 0);
+
+    window->priv->overlay = gtk_overlay_new ();
+    gtk_widget_show (window->priv->overlay);
+    gtk_box_pack_start (GTK_BOX (window->priv->vbox), window->priv->overlay, TRUE, TRUE, 0);
+    gtk_overlay_add_overlay (GTK_OVERLAY (window->priv->overlay), window->priv->lock_box);
 
     gtk_container_add (GTK_CONTAINER (window->priv->lock_box), window->priv->lock_socket);
 
@@ -1378,10 +1411,15 @@ popdown_dialog (GSWindow *window) {
     window->priv->last_y = -1;
 
     if (window->priv->lock_box != NULL) {
-        gtk_container_remove (GTK_CONTAINER (window->priv->vbox), GTK_WIDGET (window->priv->lock_box));
+        gtk_container_remove (GTK_CONTAINER (window->priv->overlay), GTK_WIDGET (window->priv->lock_box));
         window->priv->lock_box = NULL;
     }
 
+    if (window->priv->overlay != NULL) {
+        gtk_container_remove (GTK_CONTAINER (window->priv->vbox), GTK_WIDGET (window->priv->overlay));
+        window->priv->overlay = NULL;
+    }
+
     remove_popup_dialog_idle (window);
     remove_command_watches (window);
 }
diff --git a/src/xfce-bg.c b/src/xfce-bg.c
index 3e74647..e283359 100644
--- a/src/xfce-bg.c
+++ b/src/xfce-bg.c
@@ -185,14 +185,6 @@ static void        xfce_bg_load_from_xfconf (XfceBG           *bg,
                                              XfconfChannel    *channel,
                                              GdkMonitor       *monitor);
 
-static cairo_surface_t * xfce_bg_create_surface_scale (XfceBG *bg,
-                                             GdkWindow        *window,
-                                             int               screen_width,
-                                             int               screen_height,
-                                             int               monitor_width,
-                                             int               monitor_height,
-                                             int               scale);
-
 static void        xfce_bg_set_placement    (XfceBG           *bg,
                                              XfceBGPlacement   placement);
 
@@ -1012,70 +1004,13 @@ xfce_bg_draw (XfceBG    *bg,
     }
 }
 
-static void
-xfce_bg_get_pixmap_size (XfceBG   *bg,
-                         int       width,
-                         int       height,
-                         int      *pixmap_width,
-                         int      *pixmap_height) {
-    int dummy;
-
-    if (!pixmap_width)
-        pixmap_width = &dummy;
-    if (!pixmap_height)
-        pixmap_height = &dummy;
-
-    *pixmap_width = width;
-    *pixmap_height = height;
-
-    if (!bg->filename) {
-        switch (bg->color_type) {
-            case XFCE_BG_COLOR_SOLID:
-            case XFCE_BG_COLOR_TRANSPARENT:
-                *pixmap_width = 1;
-                *pixmap_height = 1;
-                break;
-
-            case XFCE_BG_COLOR_H_GRADIENT:
-            case XFCE_BG_COLOR_V_GRADIENT:
-                break;
-        }
-
-        return;
-    }
-}
-
-/**
- * xfce_bg_create_surface:
- * @bg: XfceBG
- * @window:
- * @width:
- * @height:
- *
- * Create a surface that can be set as background for @window.
- **/
-cairo_surface_t *
-xfce_bg_create_surface (XfceBG    *bg,
-                        GdkWindow *window,
-                        int        screen_width,
-                        int        screen_height,
-                        int        monitor_width,
-                        int        monitor_height) {
-    return xfce_bg_create_surface_scale (bg,
-                                         window,
-                                         screen_width,
-                                         screen_height,
-                                         monitor_width,
-                                         monitor_height,
-                                         1);
-}
-
 GdkPixbuf *
 xfce_bg_get_pixbuf(XfceBG *bg,
                    int     screen_width,
                    int     screen_height,
                    int     monitor_width,
-                   int     monitor_height) {
+                   int     monitor_height,
+                   int     scale) {
     GdkPixbuf *pixbuf;
     gint       width;
     gint       height;
@@ -1096,71 +1031,6 @@ xfce_bg_get_pixbuf(XfceBG *bg,
     return pixbuf;
 }
 
-/**
- * xfce_bg_create_surface:
- * @bg: XfceBG
- * @window:
- * @width:
- * @height:
- * @scale:
- *
- * Create a scaled surface that can be set as background for @window.
- **/
-static cairo_surface_t *
-xfce_bg_create_surface_scale (XfceBG    *bg,
-                              GdkWindow *window,
-                              int        screen_width,
-                              int        screen_height,
-                              int        monitor_width,
-                              int        monitor_height,
-                              int        scale) {
-    int              pm_width, pm_height;
-    int              width, height;
-
-    cairo_surface_t *surface;
-    cairo_t         *cr;
-
-    g_return_val_if_fail (bg != NULL, NULL);
-    g_return_val_if_fail (window != NULL, NULL);
-
-    if (bg->placement == XFCE_BG_PLACEMENT_SPANNED) {
-        width = screen_width;
-        height = screen_height;
-    } else {
-        width = monitor_width;
-        height = monitor_height;
-    }
-
-    if (bg->pixbuf_cache &&
-        (gdk_pixbuf_get_width(bg->pixbuf_cache) != width ||
-            gdk_pixbuf_get_height(bg->pixbuf_cache) != height)) {
-        g_object_unref(bg->pixbuf_cache);
-        bg->pixbuf_cache = NULL;
-    }
-
-    xfce_bg_get_pixmap_size (bg, width, height, &pm_width, &pm_height);
-
-    surface = gdk_window_create_similar_surface (window, CAIRO_CONTENT_COLOR,
-                                pm_width, pm_height);
-
-    cr = cairo_create (surface);
-    cairo_scale (cr, (double)scale, (double)scale);
-
-    if (!bg->filename && bg->color_type == XFCE_BG_COLOR_SOLID) {
-        gdk_cairo_set_source_rgba (cr, &(bg->primary));
-    } else {
-        GdkPixbuf *pixbuf = xfce_bg_get_pixbuf(bg, screen_width, screen_height, monitor_width, monitor_height);
-        gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
-        g_object_unref (pixbuf);
-    }
-
-    cairo_paint (cr);
-
-    cairo_destroy (cr);
-
-    return surface;
-}
-
 /* Implementation of the pixbuf cache */
 struct _SlideShow {
     gint      ref_count;
diff --git a/src/xfce-bg.h b/src/xfce-bg.h
index 19b28bb..38c96e2 100644
--- a/src/xfce-bg.h
+++ b/src/xfce-bg.h
@@ -81,18 +81,12 @@ void              xfce_bg_load_from_preferences (XfceBG     *bg,
                                                  GdkMonitor *monitor);
 
 /* Drawing and thumbnailing */
-cairo_surface_t * xfce_bg_create_surface        (XfceBG     *bg,
-                                                 GdkWindow  *window,
-                                                 int         screen_width,
-                                                 int         screen_height,
-                                                 int         monitor_width,
-                                                 int         monitor_height);
-
 GdkPixbuf *       xfce_bg_get_pixbuf            (XfceBG     *bg,
                                                  int         screen_width,
                                                  int         screen_height,
                                                  int         monitor_width,
-                                                 int         monitor_height);
+                                                 int         monitor_height,
+                                                 int         scale);
 
 G_END_DECLS
 
diff --git a/src/xfce4-screensaver-preferences.ui b/src/xfce4-screensaver-preferences.ui
index fdcecd4..92712ae 100644
--- a/src/xfce4-screensaver-preferences.ui
+++ b/src/xfce4-screensaver-preferences.ui
@@ -929,8 +929,8 @@ Simon Steinbeiß
                         </child>
                         <child>
                           <object class="GtkLabel" id="lock_embedded_keyboard_label">
+                            <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="no_show_all">True</property>
                             <property name="margin_top">12</property>
                             <property name="label" translatable="yes">On Screen Keyboard</property>
                             <property name="xalign">0</property>
@@ -946,8 +946,8 @@ Simon Steinbeiß
                         </child>
                         <child>
                           <object class="GtkSwitch" id="lock_embedded_keyboard_enabled">
+                            <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="no_show_all">True</property>
                             <property name="halign">end</property>
                             <property name="valign">center</property>
                             <property name="margin_top">12</property>
@@ -959,8 +959,8 @@ Simon Steinbeiß
                         </child>
                         <child>
                           <object class="GtkLabel" id="lock_embedded_keyboard_command_label">
+                            <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="no_show_all">True</property>
                             <property name="margin_left">12</property>
                             <property name="label" translatable="yes">On screen keyboard command:</property>
                             <property name="xalign">0</property>
@@ -972,8 +972,8 @@ Simon Steinbeiß
                         </child>
                         <child>
                           <object class="GtkEntry" id="lock_embedded_keyboard_command">
+                            <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="no_show_all">True</property>
                           </object>
                           <packing>
                             <property name="left_attach">1</property>

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


More information about the Xfce4-commits mailing list