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 <[email protected]> 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. _______________________________________________ Xfce4-commits mailing list [email protected] https://mail.xfce.org/mailman/listinfo/xfce4-commits
