[Xfce4-commits] <xfce4-panel:devel> Make the right click menu work
Nick Schermer
nick at xfce.org
Tue Aug 11 20:26:52 CEST 2009
Updating branch refs/heads/devel
to 1eaaebd054c039293c4e33b09806509cfbc5de96 (commit)
from 4f3dc438a8d5af0d042970cec503cff18197dd8e (commit)
commit 1eaaebd054c039293c4e33b09806509cfbc5de96
Author: Nick Schermer <nick at xfce.org>
Date: Thu Feb 19 21:18:47 2009 +0100
Make the right click menu work
Not working perfect since it uses xfce_panel_plugin_position_menu(),
which brings some improvements like a registered menu, but this
positioning is not working very good on all screen positions (yet).
Also decrease the maximum column number of the tasklist code a bit.
plugins/tasklist/tasklist-widget.c | 117 +++++++++++++++++++++++++++---------
1 files changed, 88 insertions(+), 29 deletions(-)
diff --git a/plugins/tasklist/tasklist-widget.c b/plugins/tasklist/tasklist-widget.c
index b896bad..41f424a 100644
--- a/plugins/tasklist/tasklist-widget.c
+++ b/plugins/tasklist/tasklist-widget.c
@@ -618,7 +618,8 @@ xfce_tasklist_drag_motion (GtkWidget *widget,
tasklist->children = g_slist_delete_link (tasklist->children, source);
/* insert in the new position */
- tasklist->children = g_slist_insert_before (tasklist->children, sibling, child);
+ tasklist->children = g_slist_insert_before (tasklist->children,
+ sibling, child);
/* update the tasklist */
gtk_widget_queue_resize (widget);
@@ -717,11 +718,16 @@ xfce_tasklist_connect_screen (XfceTasklist *tasklist)
tasklist->screen = wnck_screen_get (gdk_screen_get_number (screen));
/* monitor screen changes */
- g_signal_connect (G_OBJECT (tasklist->screen), "active-window-changed", G_CALLBACK (xfce_tasklist_active_window_changed), tasklist);
- g_signal_connect (G_OBJECT (tasklist->screen), "active-workspace-changed", G_CALLBACK (xfce_tasklist_active_workspace_changed), tasklist);
- g_signal_connect (G_OBJECT (tasklist->screen), "window-opened", G_CALLBACK (xfce_tasklist_window_added), tasklist);
- g_signal_connect (G_OBJECT (tasklist->screen), "window-closed", G_CALLBACK (xfce_tasklist_window_removed), tasklist);
- g_signal_connect (G_OBJECT (tasklist->screen), "viewports-changed", G_CALLBACK (xfce_tasklist_viewports_changed), tasklist);
+ g_signal_connect (G_OBJECT (tasklist->screen), "active-window-changed",
+ G_CALLBACK (xfce_tasklist_active_window_changed), tasklist);
+ g_signal_connect (G_OBJECT (tasklist->screen), "active-workspace-changed",
+ G_CALLBACK (xfce_tasklist_active_workspace_changed), tasklist);
+ g_signal_connect (G_OBJECT (tasklist->screen), "window-opened",
+ G_CALLBACK (xfce_tasklist_window_added), tasklist);
+ g_signal_connect (G_OBJECT (tasklist->screen), "window-closed",
+ G_CALLBACK (xfce_tasklist_window_removed), tasklist);
+ g_signal_connect (G_OBJECT (tasklist->screen), "viewports-changed",
+ G_CALLBACK (xfce_tasklist_viewports_changed), tasklist);
}
@@ -736,11 +742,16 @@ xfce_tasklist_disconnect_screen (XfceTasklist *tasklist)
panel_return_if_fail (WNCK_IS_SCREEN (tasklist->screen));
/* disconnect monitor signals */
- g_signal_handlers_disconnect_by_func (G_OBJECT (tasklist->screen), G_CALLBACK (xfce_tasklist_active_window_changed), tasklist);
- g_signal_handlers_disconnect_by_func (G_OBJECT (tasklist->screen), G_CALLBACK (xfce_tasklist_active_workspace_changed), tasklist);
- g_signal_handlers_disconnect_by_func (G_OBJECT (tasklist->screen), G_CALLBACK (xfce_tasklist_window_added), tasklist);
- g_signal_handlers_disconnect_by_func (G_OBJECT (tasklist->screen), G_CALLBACK (xfce_tasklist_window_removed), tasklist);
- g_signal_handlers_disconnect_by_func (G_OBJECT (tasklist->screen), G_CALLBACK (xfce_tasklist_viewports_changed), tasklist);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (tasklist->screen),
+ G_CALLBACK (xfce_tasklist_active_window_changed), tasklist);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (tasklist->screen),
+ G_CALLBACK (xfce_tasklist_active_workspace_changed), tasklist);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (tasklist->screen),
+ G_CALLBACK (xfce_tasklist_window_added), tasklist);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (tasklist->screen),
+ G_CALLBACK (xfce_tasklist_window_removed), tasklist);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (tasklist->screen),
+ G_CALLBACK (xfce_tasklist_viewports_changed), tasklist);
/* remove all the windows */
for (li = tasklist->children; li != NULL; li = lnext)
@@ -1202,13 +1213,15 @@ tasklist_button_toggled (GtkToggleButton *button,
/* only switch workspaces if we show application from other workspaces
* don't switch when switch on minimize is disabled and the window is minimized */
if (child->tasklist->all_workspaces
- && (!wnck_window_is_minimized (child->window) || child->tasklist->switch_workspace))
+ && (!wnck_window_is_minimized (child->window)
+ || child->tasklist->switch_workspace))
{
/* get the screen of this window and the workspaces */
workspace = wnck_window_get_workspace (child->window);
/* switch to the correct workspace */
- if (workspace && workspace != wnck_screen_get_active_workspace (child->tasklist->screen))
+ if (workspace
+ && workspace != wnck_screen_get_active_workspace (child->tasklist->screen))
wnck_workspace_activate (workspace, timestamp - 1);
}
@@ -1273,6 +1286,35 @@ tasklist_button_enter_notify_event (GtkWidget *button,
+static gboolean
+tasklist_button_button_press_event (GtkWidget *button,
+ GdkEventButton *event,
+ XfceTasklistChild *child)
+{
+ GtkWidget *menu, *panel_plugin;
+
+ if (event->button == 3)
+ {
+ panel_plugin = gtk_widget_get_parent (GTK_WIDGET (child->tasklist));
+ panel_return_val_if_fail (XFCE_IS_PANEL_PLUGIN (panel_plugin), FALSE);
+
+ menu = wnck_action_menu_new (child->window);
+ gtk_menu_attach_to_widget (GTK_MENU (menu), button, NULL);
+ g_signal_connect (G_OBJECT (menu), "selection-done",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
+ xfce_panel_plugin_position_menu,
+ panel_plugin, event->button,
+ event->time);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+
static void
tasklist_button_new (XfceTasklistChild *child)
{
@@ -1280,9 +1322,14 @@ tasklist_button_new (XfceTasklistChild *child)
/* create the application button */
child->button = gtk_toggle_button_new ();
- gtk_button_set_relief (GTK_BUTTON (child->button), child->tasklist->button_relief);
- g_signal_connect (G_OBJECT (child->button), "toggled", G_CALLBACK (tasklist_button_toggled), child);
- g_signal_connect (G_OBJECT (child->button), "enter-notify-event", G_CALLBACK (tasklist_button_enter_notify_event), child);
+ gtk_button_set_relief (GTK_BUTTON (child->button),
+ child->tasklist->button_relief);
+ g_signal_connect (G_OBJECT (child->button), "toggled",
+ G_CALLBACK (tasklist_button_toggled), child);
+ g_signal_connect (G_OBJECT (child->button), "enter-notify-event",
+ G_CALLBACK (tasklist_button_enter_notify_event), child);
+ g_signal_connect (G_OBJECT (child->button), "button-press-event",
+ G_CALLBACK (tasklist_button_button_press_event), child);
gtk_widget_show (child->button);
child->box = gtk_hbox_new (FALSE, 6);
@@ -1306,13 +1353,18 @@ tasklist_button_new (XfceTasklistChild *child)
gtk_widget_show (child->label);
/* set the button's drag source */
- gtk_drag_source_set (child->button, GDK_BUTTON1_MASK, drop_targets, G_N_ELEMENTS (drop_targets), GDK_ACTION_MOVE);
+ gtk_drag_source_set (child->button, GDK_BUTTON1_MASK, drop_targets,
+ G_N_ELEMENTS (drop_targets), GDK_ACTION_MOVE);
/* monitor window changes */
- g_signal_connect (G_OBJECT (window), "icon-changed", G_CALLBACK (tasklist_button_icon_changed), child);
- g_signal_connect (G_OBJECT (window), "name-changed", G_CALLBACK (tasklist_button_name_changed), child);
- g_signal_connect (G_OBJECT (window), "state-changed", G_CALLBACK (tasklist_button_state_changed), child);
- g_signal_connect (G_OBJECT (window), "workspace-changed", G_CALLBACK (tasklist_button_workspace_changed), child);
+ g_signal_connect (G_OBJECT (window), "icon-changed",
+ G_CALLBACK (tasklist_button_icon_changed), child);
+ g_signal_connect (G_OBJECT (window), "name-changed",
+ G_CALLBACK (tasklist_button_name_changed), child);
+ g_signal_connect (G_OBJECT (window), "state-changed",
+ G_CALLBACK (tasklist_button_state_changed), child);
+ g_signal_connect (G_OBJECT (window), "workspace-changed",
+ G_CALLBACK (tasklist_button_workspace_changed), child);
/* poke functions */
tasklist_button_icon_changed (window, child);
@@ -1344,14 +1396,18 @@ xfce_tasklist_set_style (XfceTasklist *tasklist,
if (style == XFCE_TASKLIST_STYLE_NORMAL)
{
gtk_widget_show (child->label);
- gtk_box_set_child_packing (GTK_BOX (child->box), child->icon,
- FALSE, FALSE, 0, GTK_PACK_START);
+ gtk_box_set_child_packing (GTK_BOX (child->box),
+ child->icon,
+ FALSE, FALSE, 0,
+ GTK_PACK_START);
}
else /* XFCE_TASKLIST_STYLE_ICONBOX */
{
gtk_widget_hide (child->label);
- gtk_box_set_child_packing (GTK_BOX (child->box), child->icon,
- TRUE, TRUE, 0, GTK_PACK_START);
+ gtk_box_set_child_packing (GTK_BOX (child->box),
+ child->icon,
+ TRUE, TRUE, 0,
+ GTK_PACK_START);
}
/* update the icon */
@@ -1391,7 +1447,8 @@ xfce_tasklist_set_include_all_workspaces (XfceTasklist *tasklist,
else
{
/* trigger signal */
- xfce_tasklist_active_workspace_changed (tasklist->screen, NULL, tasklist);
+ xfce_tasklist_active_workspace_changed (tasklist->screen,
+ NULL, tasklist);
}
}
}
@@ -1416,7 +1473,8 @@ xfce_tasklist_set_button_relief (XfceTasklist *tasklist,
for (li = tasklist->children; li != NULL; li = li->next)
{
child = li->data;
- gtk_button_set_relief (GTK_BUTTON (child->button), button_relief);
+ gtk_button_set_relief (GTK_BUTTON (child->button),
+ button_relief);
}
}
}
@@ -1462,7 +1520,8 @@ xfce_tasklist_set_show_only_minimized (XfceTasklist *tasklist,
/* update the buttons when we show only the active workspace */
if (tasklist->all_workspaces == FALSE)
- xfce_tasklist_active_workspace_changed (tasklist->screen, NULL, tasklist);
+ xfce_tasklist_active_workspace_changed (tasklist->screen,
+ NULL, tasklist);
}
}
@@ -1489,7 +1548,7 @@ xfce_tasklist_set_orientation (XfceTasklist *tasklist,
GtkOrientation orientation)
{
panel_return_if_fail (XFCE_IS_TASKLIST (tasklist));
-
+
if (tasklist->orientation != orientation)
{
tasklist->orientation = orientation;
More information about the Xfce4-commits
mailing list