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 <[email protected]> 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, <[email protected]> - * + * * - launcher plugin * launcher.c - (xfce4-panel plugin that opens programs) * Copyright (c) 2005-2007 Jasper Huijsmans <[email protected]> * Copyright (c) 2006-2007 Nick Schermer <[email protected]> - * + * * 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. _______________________________________________ Xfce4-commits mailing list [email protected] https://mail.xfce.org/mailman/listinfo/xfce4-commits
