[Xfce4-commits] [panel-plugins/xfce4-places-plugin] 20/30: Replace deprecated gtk_menu_popup

noreply at xfce.org noreply at xfce.org
Mon Apr 22 12:08:11 CEST 2019


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

b   l   u   e   s   a   b   r   e       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-places-plugin.

commit f3056cae74f9cadd34b3219d2f59fe22be7d8982
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Apr 21 06:55:15 2019 -0400

    Replace deprecated gtk_menu_popup
---
 panel-plugin/view.c | 113 ++++++++++++++++++++++++++++++++++------------------
 1 file changed, 75 insertions(+), 38 deletions(-)

diff --git a/panel-plugin/view.c b/panel-plugin/view.c
index 4010998..82a5369 100644
--- a/panel-plugin/view.c
+++ b/panel-plugin/view.c
@@ -14,12 +14,12 @@
  *   - xfdesktop menu plugin
  *     desktop-menu-plugin.c - xfce4-panel plugin that displays the desktop menu
  *     Copyright (C) 2004 Brian Tarricone, <bjt23 at cornell.edu>
- *  
+ *
  *   - launcher plugin
  *     launcher.c - (xfce4-panel plugin that opens programs)
  *     Copyright (c) 2005-2007 Jasper Huijsmans <jasper at xfce.org>
  *     Copyright (c) 2006-2007 Nick Schermer <nick at xfce.org>
- * 
+ *
  *  Popup command code adapted from:
  *   - windowlist plugin
  *     windowlist.c - (xfce4-panel plugin that lists open windows)
@@ -75,10 +75,10 @@ struct _PlacesView
 {
     /* plugin */
     XfcePanelPlugin           *plugin;
-    
+
     /* configuration */
     PlacesCfg                 *cfg;
-    
+
     /* view */
     GtkWidget                 *button;
     GtkWidget                 *menu;
@@ -93,7 +93,7 @@ struct _PlacesView
 
     gboolean                   needs_separator;
     guint                      menu_timeout_id;
-    
+
     /* model */
     GList                     *bookmark_groups;
 };
@@ -140,7 +140,7 @@ pview_destroy_model(PlacesView *view)
 
     /* we don't want the menu items holding on to any references */
     pview_destroy_menu(view);
-   
+
     if(view->bookmark_groups != NULL){
 
         bookmark_group_li = view->bookmark_groups;
@@ -211,7 +211,7 @@ pview_bookmark_action_call_wrapper(PlacesView *view, PlacesBookmarkAction *actio
             gtk_main_iteration();
 
         places_bookmark_action_call(action);
-    
+
         gtk_widget_set_sensitive(view->button, TRUE);
 
     }else{
@@ -237,7 +237,7 @@ pview_cb_menu_timeout(PlacesView *pd){
         pview_open_menu(pd);
 
     PLACES_DEBUG_MENU_TIMEOUT_COUNT(0);
-    return TRUE;   
+    return TRUE;
 
 
   killtimeout:
@@ -251,7 +251,7 @@ pview_cb_menu_timeout(PlacesView *pd){
 
 }
 
-static void 
+static void
 pview_cb_menu_deact(PlacesView *pd, GtkWidget *menu)
 {
     /* deactivate button */
@@ -312,10 +312,50 @@ pview_cb_menu_context_deact(PlacesView *pd, GtkWidget *context_menu)
     gtk_menu_shell_deactivate(GTK_MENU_SHELL(pd->menu));
 }
 
+static void
+open_menu_at_pointer (GtkMenu *menu)
+{
+    GdkDevice    *mouse_device;
+    GdkRectangle  rect;
+    GdkSeat      *seat;
+    GdkWindow    *window;
+    gint          x, y;
+
+    window = gdk_display_get_default_group (gdk_display_get_default ());
+    seat = gdk_display_get_default_seat (gdk_display_get_default ());
+    mouse_device = gdk_seat_get_pointer (seat);
+    gdk_window_get_device_position (window,
+                                    mouse_device,
+                                    &x, &y,
+                                    NULL);
+    rect.x = x;
+    rect.y = y;
+    rect.width = gdk_window_get_width (window);
+    rect.height = gdk_window_get_height (window);
+
+    gtk_menu_popup_at_rect (menu,
+                            window,
+                            &rect,
+                            GDK_GRAVITY_NORTH_WEST,
+                            GDK_GRAVITY_NORTH_WEST,
+                            NULL);
+}
+
+static void
+open_menu_at_widget (GtkMenu   *menu,
+                     GtkWidget *widget)
+{
+    gtk_menu_popup_at_widget (menu,
+                              widget,
+                              GDK_GRAVITY_SOUTH_WEST,
+                              GDK_GRAVITY_NORTH_WEST,
+                              NULL);
+}
+
 static gboolean
 pview_cb_menu_item_do_alt(PlacesView *pd, GtkWidget *menu_item)
 {
-    
+
     PlacesBookmark *bookmark = (PlacesBookmark*) g_object_get_data(G_OBJECT(menu_item), "bookmark");
     GList *actions = bookmark->actions;
     GtkWidget *context, *context_item;
@@ -333,7 +373,7 @@ pview_cb_menu_item_do_alt(PlacesView *pd, GtkWidget *menu_item)
             g_object_set_data(G_OBJECT(context_item), "action", action);
             g_signal_connect(context_item, "activate",
                              G_CALLBACK(pview_cb_menu_item_context_act), pd);
-            
+
             gtk_menu_shell_append(GTK_MENU_SHELL(context), context_item);
             gtk_widget_show(context_item);
 
@@ -341,10 +381,7 @@ pview_cb_menu_item_do_alt(PlacesView *pd, GtkWidget *menu_item)
         }while(actions != NULL);
 
         gtk_widget_show(context);
-        gtk_menu_popup(GTK_MENU(context),
-                       NULL, NULL,
-                       NULL, NULL,
-                       0, gtk_get_current_event_time());
+        open_menu_at_pointer (GTK_MENU (context));
 
         g_signal_connect_swapped(context, "deactivate",
                                  G_CALLBACK(pview_cb_menu_context_deact), pd);
@@ -358,7 +395,7 @@ static gboolean
 pview_cb_menu_item_press(GtkWidget *menu_item, GdkEventButton *event, PlacesView *pd)
 {
 
-    gboolean ctrl =  (event->state & GDK_CONTROL_MASK) && 
+    gboolean ctrl =  (event->state & GDK_CONTROL_MASK) &&
                     !(event->state & (GDK_MOD1_MASK|GDK_SHIFT_MASK|GDK_MOD4_MASK));
     PlacesBookmark *bookmark = (PlacesBookmark*) g_object_get_data(G_OBJECT(menu_item), "bookmark");
 
@@ -392,7 +429,7 @@ pview_cb_recent_changed(GtkRecentManager *recent_manager, GtkWidget *recent_menu
 {
     GtkWidget *recent_item;
     int recent_count = 0;
-    
+
     g_object_get(recent_manager,
                  "size", &recent_count,
                  NULL);
@@ -419,12 +456,12 @@ static gboolean
 pview_cb_recent_items_clear(GtkWidget *clear_item, GtkWidget *recent_menu)
 {
     GtkRecentManager *manager = gtk_recent_manager_get_default();
-    
+
     gint removed = gtk_recent_manager_purge_items(manager, NULL);
     DBG("Cleared %d recent items", removed);
 
     pview_cb_recent_changed(manager, recent_menu);
-    
+
     return TRUE;
 }
 
@@ -591,7 +628,7 @@ pview_update_menu(PlacesView *pd)
 
     /* Create a new menu */
     pd->menu = gtk_menu_new();
-    
+
     /* make sure the menu popups up in right screen */
     /* need exo_noop for GTK 2.6 and 2.8; starting with 2.10, NULL is OK */
     gtk_menu_attach_to_widget(GTK_MENU(pd->menu), pd->button, (GtkMenuDetachFunc) exo_noop);
@@ -601,7 +638,7 @@ pview_update_menu(PlacesView *pd)
     /* add bookmarks */
     bookmark_group_li = pd->bookmark_groups;
     while(bookmark_group_li != NULL){
-        
+
         if(bookmark_group_li->data == NULL){ /* separator */
 
             pd->needs_separator = TRUE;
@@ -610,7 +647,7 @@ pview_update_menu(PlacesView *pd)
 
             bookmark_group = (PlacesBookmarkGroup*) bookmark_group_li->data;
             bookmarks = places_bookmark_group_get_bookmarks(bookmark_group);
-    
+
             while(bookmarks != NULL){
                 bookmark = (PlacesBookmark*) bookmarks->data;
                 pview_add_menu_item(pd, bookmark);
@@ -648,10 +685,10 @@ pview_update_menu(PlacesView *pd)
             gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(search_item), search_image);
             G_GNUC_END_IGNORE_DEPRECATIONS
         }
-        
+
         gtk_menu_shell_append(GTK_MENU_SHELL(pd->menu), search_item);
         gtk_widget_show(search_item);
-        
+
         g_signal_connect_swapped(search_item, "activate",
                                  G_CALLBACK(places_gui_exec), pd->cfg->search_cmd);
 
@@ -667,15 +704,15 @@ pview_update_menu(PlacesView *pd)
         gtk_recent_chooser_set_limit(GTK_RECENT_CHOOSER(recent_menu), pd->cfg->show_recent_number);
         gtk_recent_chooser_set_sort_type(GTK_RECENT_CHOOSER(recent_menu), GTK_RECENT_SORT_MRU);
 
-        g_signal_connect(recent_menu, "item-activated", 
+        g_signal_connect(recent_menu, "item-activated",
                          G_CALLBACK(pview_cb_recent_item_open), pd);
-            
+
         if(pd->cfg->show_recent_clear){
 
             separator = gtk_separator_menu_item_new();
             gtk_menu_shell_append(GTK_MENU_SHELL(recent_menu), separator);
             gtk_widget_show(separator);
-   
+
             if(pd->cfg->show_icons){
                 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
                 clear_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_CLEAR, NULL);
@@ -693,20 +730,20 @@ pview_update_menu(PlacesView *pd)
             /* use activate when button-release-event doesn't catch it (e.g., enter key pressed) */
             g_signal_connect(clear_item, "activate",
                              G_CALLBACK(pview_cb_recent_items_clear), recent_menu);
-    
+
         }
 
         G_GNUC_BEGIN_IGNORE_DEPRECATIONS
         recent_item = gtk_image_menu_item_new_with_label(_("Recent Documents"));
         if(pd->cfg->show_icons){
-            gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(recent_item), 
+            gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(recent_item),
                                           gtk_image_new_from_stock(GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU));
         }
         G_GNUC_END_IGNORE_DEPRECATIONS
 
         gtk_menu_item_set_submenu(GTK_MENU_ITEM(recent_item), recent_menu);
         gtk_widget_show(recent_menu);
-        
+
         gtk_menu_shell_append(GTK_MENU_SHELL(pd->menu), recent_item);
         gtk_widget_show(recent_item);
 
@@ -740,10 +777,10 @@ pview_open_menu_at (PlacesView   *pd,
 
     /* popup menu */
     DBG("menu: %x", (guint)pd->menu);
-    gtk_menu_popup (GTK_MENU (pd->menu), NULL, NULL,
-                    (button != NULL) ? xfce_panel_plugin_position_menu : NULL,
-                    pd->plugin, 1,
-                    gtk_get_current_event_time ());
+    if (button == NULL)
+        open_menu_at_pointer (GTK_MENU (pd->menu));
+    else
+        open_menu_at_widget (GTK_MENU (pd->menu), button);
 
     /* menu timeout to poll for model changes */
     if(pd->menu_timeout_id == 0){
@@ -917,7 +954,7 @@ places_view_init(XfcePanelPlugin *plugin)
 
     view            = g_new0(PlacesView, 1);
     view->plugin    = plugin;
-    
+
     view->cfg      = places_cfg_new(view->plugin);
     g_signal_connect_swapped (G_OBJECT (view->cfg), "button-changed",
                               G_CALLBACK (pview_button_update), view);
@@ -927,7 +964,7 @@ places_view_init(XfcePanelPlugin *plugin)
                               G_CALLBACK (pview_reconfigure_model), view);
 
     pview_reconfigure_model(view);
-    
+
 #if USE_GTK_TOOLTIP_API
     DBG("using GtkTooltip API");
 #else
@@ -957,7 +994,7 @@ places_view_init(XfcePanelPlugin *plugin)
     */
     g_signal_connect_swapped(view->button, "screen-changed",
                              G_CALLBACK(pview_destroy_menu), view);
-    
+
     /* button signal */
     g_signal_connect_swapped(view->button, "button-press-event",
                              G_CALLBACK(pview_cb_button_pressed), view);
@@ -971,7 +1008,7 @@ places_view_init(XfcePanelPlugin *plugin)
     return view;
 }
 
-void 
+void
 places_view_finalize(PlacesView *view)
 {
     pview_destroy_menu(view);

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


More information about the Xfce4-commits mailing list