[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