summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2014-06-08 21:34:48 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2014-06-08 21:34:48 +0300
commita7dd07274af1ea7a5e2606881e55c480c38e395a (patch)
treec9167e5171b561c6ce1a9b0f405f376378f911c1
parent9944b4d76baf8afd6afe8e0ae0bac3b0fad72bc0 (diff)
downloadmetacity-a7dd07274af1ea7a5e2606881e55c480c38e395a.tar.gz
tabpopup.c: improve
* Fix missing white border on outline window. * Do not create outline_window if we are not going to use it.
-rw-r--r--src/ui/tabpopup.c72
1 files changed, 31 insertions, 41 deletions
diff --git a/src/ui/tabpopup.c b/src/ui/tabpopup.c
index 8035be21..f9fcafdf 100644
--- a/src/ui/tabpopup.c
+++ b/src/ui/tabpopup.c
@@ -229,19 +229,32 @@ meta_ui_tab_popup_new (const MetaTabEntry *entries,
popup = g_new (MetaTabPopup, 1);
- popup->outline_window = gtk_window_new (GTK_WINDOW_POPUP);
-
screen = gdk_display_get_screen (gdk_display_get_default (),
screen_number);
- gtk_window_set_screen (GTK_WINDOW (popup->outline_window),
- screen);
- gtk_widget_set_app_paintable (popup->outline_window, TRUE);
- gtk_widget_realize (popup->outline_window);
+ if (outline)
+ {
+ GdkRGBA black = { 0.0, 0.0, 0.0, 1.0 };
+
+ popup->outline_window = gtk_window_new (GTK_WINDOW_POPUP);
+
+ gtk_window_set_screen (GTK_WINDOW (popup->outline_window),
+ screen);
+
+ gtk_widget_set_app_paintable (popup->outline_window, TRUE);
+ gtk_widget_realize (popup->outline_window);
+
+ gdk_window_set_background_rgba (gtk_widget_get_window (popup->outline_window),
+ &black);
+
+ g_signal_connect (G_OBJECT (popup->outline_window), "draw",
+ G_CALLBACK (outline_window_draw), popup);
+
+ gtk_widget_show (popup->outline_window);
+ }
+ else
+ popup->outline_window = NULL;
- g_signal_connect (G_OBJECT (popup->outline_window), "draw",
- G_CALLBACK (outline_window_draw), popup);
-
popup->window = gtk_window_new (GTK_WINDOW_POPUP);
gtk_window_set_screen (GTK_WINDOW (popup->window),
@@ -407,8 +420,9 @@ void
meta_ui_tab_popup_free (MetaTabPopup *popup)
{
meta_verbose ("Destroying tab popup window\n");
-
- gtk_widget_destroy (popup->outline_window);
+
+ if (popup->outline_window != NULL)
+ gtk_widget_destroy (popup->outline_window);
gtk_widget_destroy (popup->window);
g_list_foreach (popup->entries, free_tab_entry, NULL);
@@ -441,10 +455,6 @@ static void
display_entry (MetaTabPopup *popup,
TabEntry *te)
{
- GdkRectangle rect;
- GdkWindow *window;
-
-
if (popup->current_selected_entry)
{
if (popup->outline)
@@ -462,44 +472,24 @@ display_entry (MetaTabPopup *popup,
if (popup->outline)
{
+ GdkRectangle rect;
cairo_region_t *region;
- cairo_region_t *inner_region;
- GdkRGBA black = { 0.0, 0.0, 0.0, 1.0 };
- window = gtk_widget_get_window (popup->outline_window);
-
- /* Do stuff behind gtk's back */
- gdk_window_hide (window);
- meta_core_increment_event_serial (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
-
rect = te->rect;
rect.x = 0;
rect.y = 0;
- gdk_window_move_resize (window,
- te->rect.x, te->rect.y,
- te->rect.width, te->rect.height);
-
- gdk_window_set_background_rgba (window, &black);
+ gtk_window_move (GTK_WINDOW (popup->outline_window), te->rect.x, te->rect.y);
+ gtk_window_resize (GTK_WINDOW (popup->outline_window), te->rect.width, te->rect.height);
region = cairo_region_create_rectangle (&rect);
- inner_region = cairo_region_create_rectangle (&te->inner_rect);
- cairo_region_subtract (region, inner_region);
- cairo_region_destroy (inner_region);
-
- gdk_window_shape_combine_region (window,
+ cairo_region_subtract_rectangle (region, &te->inner_rect);
+
+ gdk_window_shape_combine_region (gtk_widget_get_window (popup->outline_window),
region,
0, 0);
cairo_region_destroy (region);
-
- /* This should piss off gtk a bit, but we don't want to raise
- * above the tab popup. So, instead of calling gtk_widget_show,
- * we manually set the window as mapped and then manually map it
- * with gdk functions.
- */
- gtk_widget_set_mapped (popup->outline_window, TRUE);
- gdk_window_show_unraised (window);
}
/* Must be before we handle an expose for the outline window */