[Xfce4-commits] <xfce4-panel:devel> Add popup under cursor for directory menu.
Nick Schermer
noreply at xfce.org
Tue Feb 23 19:30:03 CET 2010
Updating branch refs/heads/devel
to 349f8929cc082c19c6e2a173be91ee398a27525a (commit)
from 84d77ce898395f339513ce78f43258d581730e4a (commit)
commit 349f8929cc082c19c6e2a173be91ee398a27525a
Author: Nick Schermer <nick at xfce.org>
Date: Tue Feb 23 19:15:33 2010 +0100
Add popup under cursor for directory menu.
plugins/directorymenu/directorymenu.c | 28 ++++++++++++++-----
plugins/directorymenu/xfce4-popup-directorymenu.sh | 8 +++++-
2 files changed, 27 insertions(+), 9 deletions(-)
diff --git a/plugins/directorymenu/directorymenu.c b/plugins/directorymenu/directorymenu.c
index ff788c3..852abd0 100644
--- a/plugins/directorymenu/directorymenu.c
+++ b/plugins/directorymenu/directorymenu.c
@@ -457,8 +457,18 @@ directory_menu_plugin_remote_event (XfcePanelPlugin *panel_plugin,
&& GTK_WIDGET_VISIBLE (panel_plugin)
&& !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (plugin->button)))
{
- /* show the menu */
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (plugin->button), TRUE);
+ if (value != NULL
+ && G_VALUE_HOLDS_BOOLEAN (value)
+ && g_value_get_boolean (value))
+ {
+ /* popup the menu under the pointer */
+ directory_menu_plugin_menu (NULL, plugin);
+ }
+ else
+ {
+ /* show the menu */
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (plugin->button), TRUE);
+ }
/* don't popup another menu */
return TRUE;
@@ -473,10 +483,11 @@ static void
directory_menu_plugin_selection_done (GtkWidget *menu,
GtkWidget *button)
{
- panel_return_if_fail (GTK_IS_TOGGLE_BUTTON (button));
+ panel_return_if_fail (button == NULL || GTK_IS_TOGGLE_BUTTON (button));
panel_return_if_fail (GTK_IS_MENU (menu));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
+ if (button != NULL)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
/* delay destruction so we can handle the activate event first */
exo_gtk_object_destroy_later (GTK_OBJECT (menu));
@@ -940,9 +951,10 @@ directory_menu_plugin_menu (GtkWidget *button,
GtkWidget *menu;
panel_return_if_fail (XFCE_IS_DIRECTORY_MENU_PLUGIN (plugin));
- panel_return_if_fail (plugin->button == button);
+ panel_return_if_fail (button == NULL || plugin->button == button);
- if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
+ if (button != NULL
+ && !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
return;
menu = gtk_menu_new ();
@@ -955,6 +967,6 @@ directory_menu_plugin_menu (GtkWidget *button,
directory_menu_plugin_menu_load (menu, plugin);
gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
- xfce_panel_plugin_position_menu, plugin,
- 1, gtk_get_current_event_time ());
+ button != NULL ? xfce_panel_plugin_position_menu : NULL,
+ plugin, 1, gtk_get_current_event_time ());
}
diff --git a/plugins/directorymenu/xfce4-popup-directorymenu.sh b/plugins/directorymenu/xfce4-popup-directorymenu.sh
index 6e66aab..a9748b5 100644
--- a/plugins/directorymenu/xfce4-popup-directorymenu.sh
+++ b/plugins/directorymenu/xfce4-popup-directorymenu.sh
@@ -20,12 +20,15 @@
export TEXTDOMAIN="xfce4-panel"
export TEXTDOMAINDIR="@localedir@"
+ATPOINTER="false"
+
case "$1" in
-h|--help)
echo "$(gettext "Usage:")"
echo " $(basename $0) [$(gettext "OPTION")...]"
echo
echo "$(gettext "Options:")"
+ echo " -p, --pointer $(gettext "Popup menu at current mouse position")"
echo " -h, --help $(gettext "Show help options")"
echo " -V, --version $(gettext "Print version information and exit")"
exit 0
@@ -34,8 +37,11 @@ case "$1" in
exec @bindir@/xfce4-panel -V "$(basename $0)"
exit 0
;;
+ -p|--pointer)
+ ATPOINTER="true"
+ ;;
esac
-exec @bindir@/xfce4-panel --plugin-event=directorymenu:popup
+exec @bindir@/xfce4-panel --plugin-event=directorymenu:popup:bool:$ATPOINTER
# vim:set ts=2 sw=2 et ai:
More information about the Xfce4-commits
mailing list