@@ -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
446459display_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