Allow the panel's desktop menu to be opened at the pointer position. Signed-off-by: Darren Salt diff -u xfdesktop4-4.3.90.2/debian/changelog xfdesktop4-4.3.90.2/debian/changelog --- xfdesktop4-4.3.90.2.orig/panel-plugin/desktop-menu-plugin.c +++ xfdesktop4-4.3.90.2/panel-plugin/desktop-menu-plugin.c @@ -341,7 +341,7 @@ } static void -menu_activate(DMPlugin *dmp) +menu_activate(DMPlugin *dmp, gboolean at_pointer) { GtkWidget *menu; GtkWidget *button; @@ -362,11 +362,12 @@ id = g_signal_connect(menu, "deactivate", G_CALLBACK(menu_deactivated), dmp); g_object_set_data(G_OBJECT(menu), "sig_id", GUINT_TO_POINTER(id)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + if (!at_pointer) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); xfce_panel_plugin_register_menu (dmp->plugin, GTK_MENU(menu)); gtk_menu_popup(GTK_MENU(menu), NULL, NULL, - (GtkMenuPositionFunc)dmp_position_menu, dmp, - 1, gtk_get_current_event_time()); + (GtkMenuPositionFunc)(at_pointer ? NULL : dmp_position_menu), + dmp, 1, gtk_get_current_event_time()); } else gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); } @@ -392,7 +393,11 @@ if(evt->data_format == 8) { if(strcmp(XFCE_MENU_MESSAGE, evt->data.b) == 0) { - menu_activate(dmp); + menu_activate(dmp, FALSE); + return TRUE; + } + if(strcmp(XFCE_MENU_AT_POINTER_MESSAGE, evt->data.b) == 0) { + menu_activate(dmp, TRUE); return TRUE; } } @@ -415,7 +420,7 @@ return FALSE; } - menu_activate(dmp); + menu_activate(dmp, FALSE); return TRUE; } --- xfdesktop4-4.3.90.2.orig/panel-plugin/xfce4-popup-menu.h +++ xfdesktop4-4.3.90.2/panel-plugin/xfce4-popup-menu.h @@ -29,6 +29,10 @@ #define XFCE_MENU_MESSAGE "xfce4-menu-popup" #endif /* XFCE_MENU_MESSAGE */ +#ifndef XFCE_MENU_AT_POINTER_MESSAGE +#define XFCE_MENU_AT_POINTER_MESSAGE "xfce4-menu-popup-p" +#endif /* XFCE_MENU_AT_POINTER_MESSAGE */ + #ifndef XFCE_MENU_SELECTION #define XFCE_MENU_SELECTION "XFCE_MENU_SELECTION" #endif /* XFCE_MENU_SELECTION */ --- xfdesktop4-4.3.90.2.orig/panel-plugin/xfce4-popup-menu.c +++ xfdesktop4-4.3.90.2/panel-plugin/xfce4-popup-menu.c @@ -79,7 +79,10 @@ gev.send_event = TRUE; gev.message_type = gdk_atom_intern("STRING", FALSE); gev.data_format = 8; - strcpy(gev.data.b, XFCE_MENU_MESSAGE); + if (argc > 1 && !strcmp (argv[1], "-pointer")) + strcpy(gev.data.b, XFCE_MENU_AT_POINTER_MESSAGE); + else + strcpy(gev.data.b, XFCE_MENU_MESSAGE); if (xfce4_check_is_running(win, &id)) gdk_event_send_client_message((GdkEvent *)&gev,