[metacity] tabpopup.c: improve * Fix missing white border on outline window. * Do not create outline_window if



commit a7dd07274af1ea7a5e2606881e55c480c38e395a
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Sun Jun 8 21:34:48 2014 +0300

    tabpopup.c: improve
    * Fix missing white border on outline window.
    * Do not create outline_window if we are not going to use it.

 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 8035be2..f9fcafd 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 */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]