[Xfce4-commits] [panel-plugins/xfce4-statusnotifier-plugin] 04/04: Fix menu positioning

noreply at xfce.org noreply at xfce.org
Sat Aug 5 21:17:13 CEST 2017


This is an automated email from the git hooks/post-receive script.

n   i   n   e   t   l   s       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository panel-plugins/xfce4-statusnotifier-plugin.

commit 52cbbdb446fdd60d39b421e197277969789aa413
Author: Viktor Odintsev <ninetls at xfce.org>
Date:   Sat Aug 5 22:15:39 2017 +0300

    Fix menu positioning
---
 panel-plugin/sn-button.c | 21 +++++++++++++++++++--
 panel-plugin/sn-plugin.c |  1 -
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/panel-plugin/sn-button.c b/panel-plugin/sn-button.c
index f43e94e..8023dd0 100644
--- a/panel-plugin/sn-button.c
+++ b/panel-plugin/sn-button.c
@@ -76,6 +76,7 @@ struct _SnButton
   GtkWidget           *box;
 
   guint                menu_deactivate_handler;
+  guint                menu_size_allocate_handler;
 };
 
 G_DEFINE_TYPE (SnButton, sn_button, GTK_TYPE_BUTTON)
@@ -132,6 +133,7 @@ sn_button_init (SnButton *button)
   button->box = NULL;
 
   button->menu_deactivate_handler = 0;
+  button->menu_size_allocate_handler = 0;
 
   gtk_widget_set_halign (GTK_WIDGET (button), GTK_ALIGN_FILL);
   gtk_widget_set_valign (GTK_WIDGET (button), GTK_ALIGN_FILL);
@@ -202,6 +204,9 @@ sn_button_finalize (GObject *object)
   if (button->menu_deactivate_handler != 0)
     g_signal_handler_disconnect (button->menu, button->menu_deactivate_handler);
 
+  if (button->menu_size_allocate_handler != 0)
+    g_signal_handler_disconnect (button->menu, button->menu_size_allocate_handler);
+
   G_OBJECT_CLASS (sn_button_parent_class)->finalize (object);
 }
 
@@ -252,7 +257,7 @@ sn_button_button_press (GtkWidget      *widget,
           button->menu_deactivate_handler = 
             g_signal_connect_swapped (G_OBJECT (button->menu), "deactivate",
                                       G_CALLBACK (sn_button_menu_deactivate), button);
-          gtk_menu_reposition (GTK_MENU (button->menu));
+
 #if GTK_CHECK_VERSION(3, 22, 0)
           gtk_menu_popup_at_widget (GTK_MENU (button->menu), widget,
                                     GDK_GRAVITY_NORTH_WEST, GDK_GRAVITY_NORTH_WEST,
@@ -356,6 +361,12 @@ sn_button_menu_changed (GtkWidget *widget,
           gtk_menu_popdown (GTK_MENU (button->menu));
         }
 
+      if (button->menu_size_allocate_handler != 0)
+        {
+          g_signal_handler_disconnect (button->menu, button->menu_size_allocate_handler);
+          button->menu_size_allocate_handler = 0;
+        }
+
       gtk_menu_detach (GTK_MENU (button->menu));
     }
 
@@ -363,7 +374,13 @@ sn_button_menu_changed (GtkWidget *widget,
   button->menu = sn_item_get_menu (item);
 
   if (button->menu != NULL)
-    gtk_menu_attach_to_widget (GTK_MENU (button->menu), GTK_WIDGET (button), NULL);
+    {
+      gtk_menu_attach_to_widget (GTK_MENU (button->menu), GTK_WIDGET (button), NULL);
+      /* restore menu position to its corner if size was changed */
+      button->menu_size_allocate_handler =
+        g_signal_connect (button->menu, "size-allocate",
+                          G_CALLBACK (gtk_menu_reposition), NULL);
+    }
 }
 
 
diff --git a/panel-plugin/sn-plugin.c b/panel-plugin/sn-plugin.c
index 8b742ab..f503b30 100644
--- a/panel-plugin/sn-plugin.c
+++ b/panel-plugin/sn-plugin.c
@@ -104,7 +104,6 @@ static void
 sn_plugin_free (XfcePanelPlugin *panel_plugin)
 {
   SnPlugin *plugin = XFCE_SN_PLUGIN (panel_plugin);
-  GList    *children, *li;
 
   /* remove children so they won't use unrefed SnItems and SnConfig */
   gtk_container_remove (GTK_CONTAINER (panel_plugin), plugin->box);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list