summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2013-01-28 16:47:47 -0500
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2015-01-07 13:21:32 +0200
commit4763561cfc2841ec0866201946299178b2e46571 (patch)
tree71823894f5dd569736168c27a8d81eb83fc5e6a1
parent515c5cc1926e33863c421549085129fa56e49d93 (diff)
downloadmetacity-4763561cfc2841ec0866201946299178b2e46571.tar.gz
resize-popup: use a tooltip style for the resize popup window
- set GTK_STYLE_CLASS_TOOLTIP on the window, and use the same code of GtkTooltip to paint it - set GDK_WINDOW_TYPE_HINT_TOOLTIP and make the window non-resizable, so it doesn't get an incorrect shadow from the WM https://bugzilla.gnome.org/show_bug.cgi?id=692741
-rw-r--r--src/ui/resizepopup.c46
1 files changed, 38 insertions, 8 deletions
diff --git a/src/ui/resizepopup.c b/src/ui/resizepopup.c
index bc929e66..f0c7a08d 100644
--- a/src/ui/resizepopup.c
+++ b/src/ui/resizepopup.c
@@ -65,21 +65,51 @@ meta_ui_resize_popup_free (MetaResizePopup *popup)
g_free (popup);
}
+static gboolean
+size_window_draw (GtkWidget *widget,
+ cairo_t *cr,
+ MetaResizePopup *popup)
+{
+ GtkStyleContext *context;
+ gint width, height;
+
+ context = gtk_widget_get_style_context (widget);
+ width = gtk_widget_get_allocated_width (widget);
+ height = gtk_widget_get_allocated_height (widget);
+
+ gtk_render_background (context, cr, 0, 0, width, height);
+ gtk_render_frame (context, cr, 0, 0, width, height);
+
+ return FALSE;
+}
+
static void
ensure_size_window (MetaResizePopup *popup)
{
+ GdkVisual *visual;
+ GdkScreen *screen;
+
if (popup->size_window)
return;
popup->size_window = gtk_window_new (GTK_WINDOW_POPUP);
-
- gtk_window_set_screen (GTK_WINDOW (popup->size_window),
- gdk_display_get_screen (gdk_x11_lookup_xdisplay (popup->display),
- popup->screen_number));
-
- /* never shrink the size window */
- gtk_window_set_resizable (GTK_WINDOW (popup->size_window),
- TRUE);
+ screen = gdk_display_get_screen (gdk_x11_lookup_xdisplay (popup->display),
+ popup->screen_number);
+ visual = gdk_screen_get_rgba_visual (screen);
+
+ gtk_window_set_screen (GTK_WINDOW (popup->size_window), screen);
+ if (visual != NULL)
+ gtk_widget_set_visual (popup->size_window, visual);
+
+ gtk_window_set_type_hint (GTK_WINDOW (popup->size_window),
+ GDK_WINDOW_TYPE_HINT_TOOLTIP);
+ gtk_window_set_resizable (GTK_WINDOW (popup->size_window), FALSE);
+
+ gtk_widget_set_app_paintable (popup->size_window, TRUE);
+ gtk_style_context_add_class (gtk_widget_get_style_context (popup->size_window),
+ GTK_STYLE_CLASS_TOOLTIP);
+ g_signal_connect (popup->size_window, "draw",
+ G_CALLBACK (size_window_draw), popup);
popup->size_label = gtk_label_new ("");