diff options
author | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2014-06-08 21:34:48 +0300 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2014-06-08 21:34:48 +0300 |
commit | a7dd07274af1ea7a5e2606881e55c480c38e395a (patch) | |
tree | c9167e5171b561c6ce1a9b0f405f376378f911c1 | |
parent | 9944b4d76baf8afd6afe8e0ae0bac3b0fad72bc0 (diff) | |
download | metacity-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.c | 72 |
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 */ |