[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