Skip to content

Commit 2ce772a

Browse files
committed
tabpopup.c: improve
* Fix missing white border on outline window. * Do not create outline_window if we are not going to use it. Adapted from https://gitlab.gnome.org/GNOME/metacity/commit/a7dd0727
1 parent ffece2a commit 2ce772a

File tree

1 file changed

+29
-32
lines changed

1 file changed

+29
-32
lines changed

src/ui/tabpopup.c

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -233,17 +233,30 @@ meta_ui_tab_popup_new (const MetaTabEntry *entries,
233233

234234
popup = g_new (MetaTabPopup, 1);
235235

236-
popup->outline_window = gtk_window_new (GTK_WINDOW_POPUP);
237-
238236
screen = gdk_display_get_default_screen (gdk_display_get_default ());
239-
gtk_window_set_screen (GTK_WINDOW (popup->outline_window),
240-
screen);
241237

242-
gtk_widget_set_app_paintable (popup->outline_window, TRUE);
243-
gtk_widget_realize (popup->outline_window);
238+
if (border & BORDER_OUTLINE_WINDOW)
239+
{
240+
GdkRGBA black = { 0.0, 0.0, 0.0, 1.0 };
241+
242+
popup->outline_window = gtk_window_new (GTK_WINDOW_POPUP);
243+
244+
gtk_window_set_screen (GTK_WINDOW (popup->outline_window),
245+
screen);
246+
247+
gtk_widget_set_app_paintable (popup->outline_window, TRUE);
248+
gtk_widget_realize (popup->outline_window);
249+
250+
gdk_window_set_background_rgba (gtk_widget_get_window (popup->outline_window),
251+
&black);
252+
253+
g_signal_connect (G_OBJECT (popup->outline_window), "draw",
254+
G_CALLBACK (outline_window_draw), popup);
244255

245-
g_signal_connect (G_OBJECT (popup->outline_window), "draw",
246-
G_CALLBACK (outline_window_draw), popup);
256+
gtk_widget_show (popup->outline_window);
257+
}
258+
else
259+
popup->outline_window = NULL;
247260

248261
popup->window = gtk_window_new (GTK_WINDOW_POPUP);
249262

@@ -446,12 +459,6 @@ static void
446459
display_entry (MetaTabPopup *popup,
447460
TabEntry *te)
448461
{
449-
GdkRectangle rect;
450-
cairo_region_t *region;
451-
cairo_region_t *inner_region;
452-
GdkWindow *window;
453-
454-
455462
if (popup->current_selected_entry)
456463
{
457464
if (popup->border & BORDER_OUTLINE_TAB)
@@ -469,8 +476,11 @@ display_entry (MetaTabPopup *popup,
469476

470477
if (popup->border & BORDER_OUTLINE_WINDOW)
471478
{
472-
window = gtk_widget_get_window (popup->outline_window);
479+
GdkRectangle rect;
480+
GdkWindow *window;
481+
cairo_region_t *region;
473482

483+
window = gtk_widget_get_window (popup->outline_window);
474484
/* Do stuff behind gtk's back */
475485
gdk_window_hide (window);
476486
meta_core_increment_event_serial (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
@@ -479,30 +489,17 @@ display_entry (MetaTabPopup *popup,
479489
rect.x = 0;
480490
rect.y = 0;
481491

482-
gdk_window_move_resize (window,
483-
te->rect.x, te->rect.y,
484-
te->rect.width, te->rect.height);
485-
486-
GdkRGBA black = { 0.0, 0.0, 0.0, 1.0 };
487-
gdk_window_set_background_rgba (window, &black);
492+
gtk_window_move (GTK_WINDOW (popup->outline_window), te->rect.x, te->rect.y);
493+
gtk_window_resize (GTK_WINDOW (popup->outline_window), te->rect.width, te->rect.height);
488494

489495
region = cairo_region_create_rectangle (&rect);
490-
inner_region = cairo_region_create_rectangle (&te->inner_rect);
491-
cairo_region_subtract (region, inner_region);
492-
cairo_region_destroy (inner_region);
496+
cairo_region_subtract_rectangle (region, &te->inner_rect);
493497

494-
gdk_window_shape_combine_region (window,
498+
gdk_window_shape_combine_region (gtk_widget_get_window (popup->outline_window),
495499
region,
496500
0, 0);
497501

498502
cairo_region_destroy (region);
499-
500-
/* This should piss off gtk a bit, but we don't want to raise
501-
* above the tab popup. So, instead of calling gtk_widget_show,
502-
* we manually set the window as mapped and then manually map it
503-
* with gdk functions.
504-
*/
505-
gtk_widget_set_mapped (popup->outline_window, TRUE);
506503
gdk_window_show_unraised (window);
507504
}
508505

0 commit comments

Comments
 (0)