[Goodies-commits] r2687 - in xfce4-places-plugin/trunk: . panel-plugin
Diego Ongaro
ongardie at xfce.org
Sun Apr 15 04:12:45 CEST 2007
Author: ongardie
Date: 2007-04-15 02:12:45 +0000 (Sun, 15 Apr 2007)
New Revision: 2687
Modified:
xfce4-places-plugin/trunk/ChangeLog
xfce4-places-plugin/trunk/panel-plugin/places.c
xfce4-places-plugin/trunk/panel-plugin/places.h
xfce4-places-plugin/trunk/panel-plugin/view.c
xfce4-places-plugin/trunk/panel-plugin/view.h
Log:
2007-04-14 Diego Ongaro <ongardie at gmail.com>
* view.c: rewrite
- Based on xfdesktop menu, launcher
- Fixes bugs #3124, #3029
- Removed arrow button
- Added "Places" tooltip
- Added listener for theme changes
Modified: xfce4-places-plugin/trunk/ChangeLog
===================================================================
--- xfce4-places-plugin/trunk/ChangeLog 2007-04-13 22:28:08 UTC (rev 2686)
+++ xfce4-places-plugin/trunk/ChangeLog 2007-04-15 02:12:45 UTC (rev 2687)
@@ -1,3 +1,12 @@
+2007-04-14 Diego Ongaro <ongardie at gmail.com>
+
+ * view.c: rewrite
+ - Based on xfdesktop menu, launcher
+ - Fixes bugs #3124, #3029
+ - Removed arrow button
+ - Added "Places" tooltip
+ - Added listener for theme changes
+
2007-04-13 Diego Ongaro <ongardie at gmail.com>
* Split view into its own file
Modified: xfce4-places-plugin/trunk/panel-plugin/places.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/places.c 2007-04-13 22:28:08 UTC (rev 2686)
+++ xfce4-places-plugin/trunk/panel-plugin/places.c 2007-04-15 02:12:45 UTC (rev 2687)
@@ -29,6 +29,9 @@
#include "model.h"
#include "view.h"
+static void places_construct(XfcePanelPlugin*);
+static void places_finalize(XfcePanelPlugin*, PlacesData*);
+
XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL(places_construct);
/**
Modified: xfce4-places-plugin/trunk/panel-plugin/places.h
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/places.h 2007-04-13 22:28:08 UTC (rev 2686)
+++ xfce4-places-plugin/trunk/panel-plugin/places.h 2007-04-15 02:12:45 UTC (rev 2687)
@@ -31,20 +31,16 @@
XfcePanelPlugin *plugin;
// view
- GtkWidget *panel_box;
- GtkWidget *panel_button;
- GtkWidget *panel_arrow;
- GtkWidget *panel_menu;
- gboolean panel_menu_open;
- int panel_size;
+ GtkWidget *view_button;
+ GtkWidget *view_button_image;
+ GtkWidget *view_menu;
+ gulong view_theme_timeout_id;
// model
gpointer bookmarks;
} PlacesData;
-static void places_construct(XfcePanelPlugin*);
-static void places_finalize(XfcePanelPlugin*, PlacesData*);
void places_load_thunar(const gchar*);
#endif
Modified: xfce4-places-plugin/trunk/panel-plugin/view.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/view.c 2007-04-13 22:28:08 UTC (rev 2686)
+++ xfce4-places-plugin/trunk/panel-plugin/view.c 2007-04-15 02:12:45 UTC (rev 2687)
@@ -2,6 +2,17 @@
*
* Copyright (c) 2007 Diego Ongaro <ongardie at gmail.com>
*
+ * Largely based on:
+ *
+ * - 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>
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -24,8 +35,6 @@
#include <gtk/gtk.h>
#include <libxfce4panel/xfce-panel-plugin.h>
-#include <libxfce4panel/xfce-arrow-button.h>
-#include <libxfce4panel/xfce-hvbox.h>
#include <libxfce4panel/xfce-panel-convenience.h>
#include <libxfcegui4/libxfcegui4.h>
@@ -33,6 +42,41 @@
#include "places.h"
#include "model.h"
+// UI Helpers
+static void places_view_update_menu(PlacesData*);
+static void places_view_open_menu(PlacesData*);
+static void places_view_destroy_menu(PlacesData*);
+static void places_view_button_update(PlacesData*);
+
+// GTK Callbacks
+
+// - Panel
+static gboolean places_view_cb_size_changed(PlacesData*, guint size);
+static gboolean places_view_cb_theme_changed(GSignalInvocationHint*,
+ guint n_param_values, const GValue *param_values,
+ PlacesData*);
+
+// - Menu
+static void places_view_cb_menu_position(GtkMenu*,
+ gint *x, gint *y,
+ gboolean *push_in,
+ PlacesData*);
+static void places_view_cb_menu_deact(PlacesData*, GtkWidget *menu);
+static void places_view_cb_menu_item_open(GtkWidget *item, const gchar *uri);
+
+// - Button
+static gboolean places_view_cb_button_pressed(PlacesData*, GdkEventButton *);
+
+// - Recent Documents
+static void places_view_cb_recent_item_open(GtkRecentChooser*, PlacesData*);
+static void places_view_cb_recent_items_clear(GtkWidget *clear_item);
+
+// Model Visitor Callbacks
+static void places_view_add_menu_item(gpointer _places_data,
+ const gchar *label, const gchar *uri, const gchar *icon);
+static void places_view_add_menu_sep(gpointer _places_data);
+
+
/********** Initialization & Finalization **********/
void
@@ -40,168 +84,165 @@
{
DBG("initializing");
- XfceScreenPosition position = xfce_panel_plugin_get_screen_position(pd->plugin);
-
- // init pd->panel_size
- pd->panel_size = 0;
+ gpointer icon_theme_class;
+ GtkTooltips *tooltips;
- // init pd->panel_box
-
- if(xfce_screen_position_is_horizontal(position))
- pd->panel_box = xfce_hvbox_new(GTK_ORIENTATION_HORIZONTAL, FALSE, 0);
- else
- pd->panel_box = xfce_hvbox_new(GTK_ORIENTATION_VERTICAL, FALSE, 0);
+ pd->view_menu = NULL;
- gtk_container_add(GTK_CONTAINER(pd->plugin), pd->panel_box);
- xfce_panel_plugin_add_action_widget(pd->plugin, pd->panel_box);
+ tooltips = gtk_tooltips_new(); // TODO: need to ref/unref?
+
+ // init button
+ pd->view_button = xfce_create_panel_toggle_button();
+ gtk_widget_show (pd->view_button);
+ gtk_container_add(GTK_CONTAINER(pd->plugin), pd->view_button);
+ gtk_button_set_focus_on_click(GTK_BUTTON(pd->view_button), FALSE);
+ gtk_tooltips_set_tip(tooltips, pd->view_button, _("Places"), NULL);
- // init pd->panel_button
- pd->panel_button = xfce_create_panel_button();
- gtk_widget_show (pd->panel_button);
- xfce_panel_plugin_add_action_widget(pd->plugin, pd->panel_button);
- gtk_container_add(GTK_CONTAINER(pd->panel_box), pd->panel_button);
+ pd->view_button_image = gtk_image_new();
+ // TODO: why does xfdesktop ref the new image?
+ gtk_widget_show(pd->view_button_image);
+ gtk_container_add(GTK_CONTAINER(pd->view_button), pd->view_button_image);
- // init pd->panel_arrow
- if(xfce_screen_position_is_left(position))
- pd->panel_arrow = xfce_arrow_button_new(GTK_ARROW_RIGHT);
- else if(xfce_screen_position_is_right(position))
- pd->panel_arrow = xfce_arrow_button_new(GTK_ARROW_LEFT);
- else if(xfce_screen_position_is_bottom(position))
- pd->panel_arrow = xfce_arrow_button_new(GTK_ARROW_UP);
- else
- pd->panel_arrow = xfce_arrow_button_new(GTK_ARROW_DOWN);
+ xfce_panel_plugin_add_action_widget(pd->plugin, pd->view_button);
- gtk_button_set_relief(GTK_BUTTON(pd->panel_arrow), GTK_RELIEF_NONE);
- gtk_widget_show(pd->panel_arrow);
- xfce_panel_plugin_add_action_widget(pd->plugin, pd->panel_arrow);
- gtk_container_add (GTK_CONTAINER(pd->panel_box), pd->panel_arrow);
- // show the box...
- gtk_widget_show(pd->panel_box);
+ // signal for icon theme changes
+ icon_theme_class = g_type_class_ref(GTK_TYPE_ICON_THEME);
+ pd->view_theme_timeout_id = g_signal_add_emission_hook(g_signal_lookup("changed", GTK_TYPE_ICON_THEME),
+ 0, (GSignalEmissionHook) places_view_cb_theme_changed,
+ pd, NULL);
+ g_type_class_unref(icon_theme_class);
+
- // init pd->panel_menu, pd->panel_menu_open
- places_view_init_menu(pd);
-
// connect the signals
- g_signal_connect(pd->panel_button, "clicked",
- G_CALLBACK(places_view_cb_button_clicked), NULL);
-
- g_signal_connect(pd->panel_menu, "deactivate",
- G_CALLBACK(places_view_cb_menu_close), pd);
-
- g_signal_connect(pd->panel_arrow, "clicked",
- G_CALLBACK(places_view_cb_menu_open), pd);
+ g_signal_connect_swapped(pd->view_button, "button-press-event",
+ G_CALLBACK(places_view_cb_button_pressed), pd);
- g_signal_connect(pd->plugin, "size-changed",
- G_CALLBACK(places_view_cb_size_changed), pd);
+ g_signal_connect_swapped(G_OBJECT(pd->plugin), "size-changed",
+ G_CALLBACK(places_view_cb_size_changed), pd);
+}
+
+void
+places_view_finalize(PlacesData *pd)
+{
+ places_view_destroy_menu(pd);
+ g_signal_remove_emission_hook(g_signal_lookup("changed", GTK_TYPE_ICON_THEME),
+ pd->view_theme_timeout_id);
}
+/********** UI Helpers **********/
+
static void
-places_view_init_menu(PlacesData *pd)
+places_view_update_menu(PlacesData *pd)
{
- DBG("initializing");
- g_assert(pd != NULL);
- g_assert(pd->panel_menu == NULL);
+ BookmarksVisitor visitor;
+ GtkWidget *recent_menu;
+ GtkWidget *clear_item;
+ GtkWidget *recent_item;
+ /* destroy the old menu, if it exists */
+ places_view_destroy_menu(pd);
+
// Create a new menu
- pd->panel_menu = gtk_menu_new();
- pd->panel_menu_open = FALSE;
+ pd->view_menu = gtk_menu_new();
+ // Register this menu (for auto-hide)
+ xfce_panel_plugin_register_menu(pd->plugin, GTK_MENU(pd->view_menu)); // TODO why does xfdesktop
+ // do this on every menu opening?
+
+ /* make sure the menu popups up in right screen */
+ gtk_menu_set_screen (GTK_MENU (pd->view_menu),
+ gtk_widget_get_screen (GTK_WIDGET (pd->plugin)));
+
+
// Add system, volumes, user bookmarks
- BookmarksVisitor *visitor = g_new0(BookmarksVisitor, 1);
- visitor->pass_thru = pd;
- visitor->item = places_view_add_menu_item;
- visitor->separator = places_view_add_menu_sep;
+ visitor.pass_thru = pd;
+ visitor.item = places_view_add_menu_item;
+ visitor.separator = places_view_add_menu_sep;
+ places_bookmarks_visit(pd->bookmarks, &visitor);
- places_bookmarks_visit(pd->bookmarks, visitor);
-
// Recent Documents
places_view_add_menu_sep(pd);
- GtkWidget *recent_menu = gtk_recent_chooser_menu_new();
+ recent_menu = gtk_recent_chooser_menu_new();
g_signal_connect(recent_menu, "item-activated",
G_CALLBACK(places_view_cb_recent_item_open), pd);
gtk_menu_shell_append(GTK_MENU_SHELL(recent_menu),
gtk_separator_menu_item_new());
- GtkWidget *clear_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_CLEAR, NULL);
+ clear_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_CLEAR, NULL);
gtk_menu_shell_append(GTK_MENU_SHELL(recent_menu), clear_item);
g_signal_connect(clear_item, "activate",
G_CALLBACK(places_view_cb_recent_items_clear), NULL);
- GtkWidget *recent_item = gtk_image_menu_item_new_with_label(_("Recent Documents"));
+ recent_item = gtk_image_menu_item_new_with_label(_("Recent Documents"));
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(recent_item),
gtk_image_new_from_stock(GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU));
gtk_menu_item_set_submenu(GTK_MENU_ITEM(recent_item), recent_menu);
- gtk_menu_shell_append(GTK_MENU_SHELL(pd->panel_menu), recent_item);
+ gtk_menu_shell_append(GTK_MENU_SHELL(pd->view_menu), recent_item);
+
// Quit hiding the menu
- gtk_widget_show_all(pd->panel_menu);
+ gtk_widget_show_all(pd->view_menu);
// This helps allocate resources beforehand so it'll pop up faster the first time
- gtk_widget_realize(pd->panel_menu);
-
- gtk_menu_attach_to_widget(GTK_MENU(pd->panel_menu), pd->panel_arrow, NULL);
-
+ gtk_widget_realize(pd->view_menu);
}
-void
-places_view_finalize(PlacesData *pd)
+
+static void
+places_view_open_menu(PlacesData *pd)
{
- // no op?
+ /* check if menu is needed, or it needs an update */
+ if(pd->view_menu == NULL || places_bookmarks_changed(pd->bookmarks))
+ places_view_update_menu(pd);
+
+ /* toggle the button */
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pd->view_button), TRUE);
+
+ /* connect deactivate signal */
+ g_signal_connect_swapped(pd->view_menu, "deactivate",
+ G_CALLBACK(places_view_cb_menu_deact), pd);
+ // TODO: in xfdesktop, why do sig_id stuff? why guint, then int? gulong is what it uses
+
+ /* popup menu */
+ gtk_menu_popup (GTK_MENU (pd->view_menu), NULL, NULL,
+ (GtkMenuPositionFunc) places_view_cb_menu_position,
+ pd, 0,
+ gtk_get_current_event_time ());
}
-/********** UI Helpers **********/
-
static void
-places_view_close_menu(PlacesData *pd)
+places_view_destroy_menu(PlacesData *pd)
{
- DBG("closing menu");
- if(pd->panel_menu_open == FALSE)
- DBG("but the menu isn't open");
-
- gtk_widget_hide(pd->panel_menu);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->panel_arrow), FALSE);
- pd->panel_menu_open = FALSE;
+ if(pd->view_menu != NULL){
+ g_signal_emit_by_name(G_OBJECT(pd->view_menu), "deactivate");
+ gtk_widget_destroy(pd->view_menu);
+ pd->view_menu = NULL;
+ }
}
static void
-places_view_redraw(PlacesData *pd)
+places_view_button_update(PlacesData *pd)
{
- DBG ("Drawing at size %d", pd->panel_size);
-
- GtkOrientation orientation = xfce_panel_plugin_get_orientation(pd->plugin);
- XfceScreenPosition position = xfce_panel_plugin_get_screen_position(pd->plugin);
- XfceArrowButton *arrow = XFCE_ARROW_BUTTON(pd->panel_arrow);
-
- if (orientation == GTK_ORIENTATION_HORIZONTAL)
- gtk_widget_set_size_request (GTK_WIDGET (pd->plugin), -1, pd->panel_size);
- else
- gtk_widget_set_size_request (GTK_WIDGET (pd->plugin), pd->panel_size, -1);
+ GdkPixbuf *icon;
+ guint size;
- xfce_hvbox_set_orientation( XFCE_HVBOX(pd->panel_box), orientation);
+ size = xfce_panel_plugin_get_size(XFCE_PANEL_PLUGIN(pd->plugin))
+ - 2 - 2 * MAX(pd->view_button->style->xthickness,
+ pd->view_button->style->ythickness);
- if (xfce_screen_position_is_left (position))
- xfce_arrow_button_set_arrow_type(arrow, GTK_ARROW_RIGHT);
- else if (xfce_screen_position_is_right (position))
- xfce_arrow_button_set_arrow_type(arrow, GTK_ARROW_LEFT);
- else if (xfce_screen_position_is_bottom (position))
- xfce_arrow_button_set_arrow_type(arrow, GTK_ARROW_UP);
- else
- xfce_arrow_button_set_arrow_type(arrow, GTK_ARROW_DOWN);
+ icon = xfce_themed_icon_load_category(2, size);
+ if(G_LIKELY(icon != NULL)){
- GdkPixbuf *pb;
- if(pd->panel_size > 16)
- pb = xfce_themed_icon_load_category(2, pd->panel_size - 8);
- else
- pb = xfce_themed_icon_load_category(2, 8);
-
- GtkWidget *image = gtk_image_new_from_pixbuf(pb);
- g_object_unref(pb);
- gtk_button_set_image(GTK_BUTTON(pd->panel_button), image);
+ gtk_image_set_from_pixbuf(GTK_IMAGE(pd->view_button_image), icon);
+ g_object_unref(G_OBJECT(icon));
+ }else{
+ gtk_image_clear(GTK_IMAGE(pd->view_button_image));
+ }
}
/********** Gtk Callbacks **********/
@@ -209,134 +250,129 @@
// Panel callbacks
static gboolean
-places_view_cb_size_changed(XfcePanelPlugin *plugin, int size, PlacesData *pd)
+places_view_cb_size_changed(PlacesData *pd, guint size)
{
- pd->panel_size = size;
- places_view_redraw(pd);
+ gtk_widget_set_size_request(pd->view_button, size, size);
+
+ if(GTK_WIDGET_REALIZED(pd->view_button))
+ places_view_button_update(pd);
+
return TRUE;
}
+static gboolean
+places_view_cb_theme_changed(GSignalInvocationHint *ihint,
+ guint n_param_values, const GValue *param_values,
+ PlacesData *pd)
+{
+ // update the button
+ if(GTK_WIDGET_REALIZED(pd->view_button))
+ places_view_button_update(pd);
+
+ // force a menu update
+ places_view_destroy_menu(pd);
+
+ return TRUE;
+}
+
// Menu callbacks
-/* Copied almost verbatim from launcher plugin */
+/* Copied almost verbatim from xfdesktop plugin */
static void
-places_view_cb_menu_position(GtkMenu *menu, int *x, int *y, gboolean *push_in, PlacesData *pd)
+places_view_cb_menu_position(GtkMenu *menu,
+ gint *x, gint *y,
+ gboolean *push_in,
+ PlacesData *pd)
{
- g_assert(pd != NULL);
-
- GtkWidget *widget = pd->panel_box;
+ XfceScreenPosition pos;
GtkRequisition req;
- GdkScreen *screen;
- GdkRectangle geom;
- int num;
- if (!GTK_WIDGET_REALIZED (GTK_WIDGET (menu)))
- gtk_widget_realize (GTK_WIDGET (menu));
+ gtk_widget_size_request(GTK_WIDGET(menu), &req);
- gtk_widget_size_request (GTK_WIDGET (menu), &req);
+ gdk_window_get_origin (GTK_WIDGET (pd->plugin)->window, x, y);
- gdk_window_get_origin (widget->window, x, y);
+ pos = xfce_panel_plugin_get_screen_position(pd->plugin);
- switch (xfce_arrow_button_get_arrow_type (XFCE_ARROW_BUTTON (pd->panel_arrow)))
- {
- case GTK_ARROW_UP:
- *x += widget->allocation.x;
- *y += widget->allocation.y - req.height;
+ switch(pos) {
+ case XFCE_SCREEN_POSITION_NW_V:
+ case XFCE_SCREEN_POSITION_W:
+ case XFCE_SCREEN_POSITION_SW_V:
+ *x += pd->view_button->allocation.width;
+ *y += pd->view_button->allocation.height - req.height;
break;
- case GTK_ARROW_DOWN:
- *x += widget->allocation.x;
- *y += widget->allocation.y + widget->allocation.height;
+
+ case XFCE_SCREEN_POSITION_NE_V:
+ case XFCE_SCREEN_POSITION_E:
+ case XFCE_SCREEN_POSITION_SE_V:
+ *x -= req.width;
+ *y += pd->view_button->allocation.height - req.height;
break;
- case GTK_ARROW_LEFT:
- *x += widget->allocation.x - req.width;
- *y += widget->allocation.y - req.height
- + widget->allocation.height;
+
+ case XFCE_SCREEN_POSITION_NW_H:
+ case XFCE_SCREEN_POSITION_N:
+ case XFCE_SCREEN_POSITION_NE_H:
+ *y += pd->view_button->allocation.height;
break;
- case GTK_ARROW_RIGHT:
- *x += widget->allocation.x + widget->allocation.width;
- *y += widget->allocation.y - req.height
- + widget->allocation.height;
+
+ case XFCE_SCREEN_POSITION_SW_H:
+ case XFCE_SCREEN_POSITION_S:
+ case XFCE_SCREEN_POSITION_SE_H:
+ *y -= req.height;
break;
- default:
- break;
+
+ default: /* floating */
+ {
+ GdkScreen *screen = NULL;
+ gint screen_width, screen_height;
+
+ gdk_display_get_pointer(gtk_widget_get_display(GTK_WIDGET(pd->plugin)),
+ &screen, x, y, NULL);
+ screen_width = gdk_screen_get_width(screen);
+ screen_height = gdk_screen_get_height(screen);
+ if ((*x + req.width) > screen_width)
+ *x -= req.width;
+ if ((*y + req.height) > screen_height)
+ *y -= req.height;
+ }
}
- screen = gtk_widget_get_screen (widget);
+ if (*x < 0)
+ *x = 0;
- num = gdk_screen_get_monitor_at_window (screen, widget->window);
+ if (*y < 0)
+ *y = 0;
- gdk_screen_get_monitor_geometry (screen, num, &geom);
-
- if (*x > geom.x + geom.width - req.width)
- *x = geom.x + geom.width - req.width;
- if (*x < geom.x)
- *x = geom.x;
-
- if (*y > geom.y + geom.height - req.height)
- *y = geom.y + geom.height - req.height;
- if (*y < geom.y)
- *y = geom.y;
-
+ /* "wtf is this ?" -Xfdesktop source */
+ *push_in = FALSE;
}
static void
-places_view_cb_menu_close(GtkMenuShell *menushell, PlacesData *pd)
+places_view_cb_menu_deact(PlacesData *pd, GtkWidget *menu)
{
- g_assert(pd != NULL);
-
- DBG("closing menu");
- places_view_close_menu(pd);
+ // deactivate button
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->view_button), FALSE);
}
static void
-places_view_cb_menu_open(GtkButton *arrow, PlacesData *pd){
- g_assert(pd != NULL);
-
- DBG("opening menu");
-
- if(pd->panel_menu_open){
-
- DBG("err...i mean closing...");
- places_view_close_menu(pd);
-
- }else{
- // This will make it behave like a mouse release when it's really a mouse press
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(arrow), TRUE);
-
- DBG("Has the model changed?");
- if(places_bookmarks_changed(pd->bookmarks)){
- DBG("Model changed");
-
- gtk_widget_destroy(pd->panel_menu);
- pd->panel_menu = NULL;
-
- places_view_init_menu(pd);
- g_signal_connect (pd->panel_menu, "deactivate",
- G_CALLBACK(places_view_cb_menu_close), pd);
-
- }
-
- gtk_menu_popup(GTK_MENU(pd->panel_menu), NULL, NULL,
- (GtkMenuPositionFunc) places_view_cb_menu_position, pd,
- 0, gtk_get_current_event_time());
- pd->panel_menu_open = TRUE;
- }
-}
-
-static void
places_view_cb_menu_item_open(GtkWidget *widget, const gchar* uri)
{
- DBG("load thunar for item");
places_load_thunar(uri);
}
// Button
+static gboolean
+places_view_cb_button_pressed(PlacesData *pd, GdkEventButton *ev)
+{
+ if(G_UNLIKELY(ev->button != 1))
+ return FALSE;
-static void
-places_view_cb_button_clicked(GtkWidget *button)
-{
- DBG("load thunar at home directory");
- places_load_thunar(NULL);
+ // TODO: why does xfdesktop have:
+ // if(evt->button != 1 || ((evt->state & GDK_CONTROL_MASK)
+ // && !(evt->state & (GDK_MOD1_MASK|GDK_SHIFT_MASK|GDK_MOD4_MASK))))
+
+ places_view_open_menu(pd);
+
+ return FALSE;
}
// Recent Documents
@@ -350,7 +386,7 @@
}
static void
-places_view_cb_recent_items_clear(GtkWidget *widget, GdkEventButton *event)
+places_view_cb_recent_items_clear(GtkWidget *clear_item)
{
GtkRecentManager *manager = gtk_recent_manager_get_default();
gint removed = gtk_recent_manager_purge_items(manager, NULL);
@@ -359,12 +395,12 @@
/********** Model Visitor Callbacks **********/
-void
+static void
places_view_add_menu_item(gpointer _pd, const gchar *label, const gchar *uri, const gchar *icon)
{
- g_assert(_pd);
- g_return_if_fail(label && label != "");
- g_return_if_fail(uri && uri != "");
+ g_assert(_pd != NULL);
+ g_return_if_fail(label != NULL && label != "");
+ g_return_if_fail(uri != NULL && uri != "");
PlacesData *pd = (PlacesData*) _pd;
GtkWidget *item = gtk_image_menu_item_new_with_label(label);
@@ -381,16 +417,16 @@
g_signal_connect(item, "activate",
G_CALLBACK(places_view_cb_menu_item_open), (gchar*) uri);
- gtk_menu_shell_append(GTK_MENU_SHELL(pd->panel_menu), item);
+ gtk_menu_shell_append(GTK_MENU_SHELL(pd->view_menu), item);
}
-void
+static void
places_view_add_menu_sep(gpointer _pd)
{
- g_assert(_pd);
+ g_assert(_pd != NULL);
PlacesData *pd = (PlacesData*) _pd;
- gtk_menu_shell_append(GTK_MENU_SHELL(pd->panel_menu),
+ gtk_menu_shell_append(GTK_MENU_SHELL(pd->view_menu),
gtk_separator_menu_item_new());
}
Modified: xfce4-places-plugin/trunk/panel-plugin/view.h
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/view.h 2007-04-13 22:28:08 UTC (rev 2686)
+++ xfce4-places-plugin/trunk/panel-plugin/view.h 2007-04-15 02:12:45 UTC (rev 2687)
@@ -20,41 +20,12 @@
#ifndef _XFCE_PANEL_PLACES_VIEW_H
#define _XFCE_PANEL_PLACES_VIEW_H
-#include <gtk/gtk.h>
-#include <libxfce4panel/xfce-panel-plugin.h>
+#include <glib.h>
#include "places.h"
// Init & Finalize
-void places_view_init(PlacesData*);
-static void places_view_init_menu(PlacesData*);
-void places_view_finalize(PlacesData*);
+void places_view_init(PlacesData*);
+void places_view_finalize(PlacesData*);
-// UI Helpers
-static void places_view_close_menu(PlacesData*);
-static void places_view_redraw(PlacesData*);
-
-// GTK Callbacks
-
-// - Panel
-static gboolean places_view_cb_size_changed(XfcePanelPlugin*, int, PlacesData*);
-
-// - Menu
-static void places_view_cb_menu_position(GtkMenu*, int*, int*, gboolean*, PlacesData*);
-static void places_view_cb_menu_close(GtkMenuShell*, PlacesData*);
-static void places_view_cb_menu_open(GtkButton*, PlacesData*);
-static void places_view_cb_menu_item_open(GtkWidget*, const gchar*);
-
-// - Button
-static void places_view_cb_button_clicked(GtkWidget*);
-
-// - Recent Documents
-static void places_view_cb_recent_item_open(GtkRecentChooser*, PlacesData*);
-static void places_view_cb_recent_items_clear(GtkWidget*, GdkEventButton*);
-
-// Model Visitor Callbacks
-void places_view_add_menu_item(gpointer _pd,
- const gchar *label, const gchar *uri, const gchar *icon);
-void places_view_add_menu_sep(gpointer _pd);
-
#endif
// vim: ai et tabstop=4
More information about the Goodies-commits
mailing list