[Xfce4-commits] <thunar:jannis/new-shortcuts-pane> Squashme: Implement shortcut activation and fix state transitions.
Jannis Pohlmann
noreply at xfce.org
Sun Nov 6 16:02:02 CET 2011
Updating branch refs/heads/jannis/new-shortcuts-pane
to d402ad0e0a8a06a7e38dbfc8beb909434a2ebe83 (commit)
from 867a219b95a1d2055452b9c0a95ea5e4841bf479 (commit)
commit d402ad0e0a8a06a7e38dbfc8beb909434a2ebe83
Author: Jannis Pohlmann <jannis at xfce.org>
Date: Sun Nov 6 16:00:07 2011 +0100
Squashme: Implement shortcut activation and fix state transitions.
thunar/thunar-shortcut.c | 15 ---
thunar/thunar-shortcuts-view.c | 224 +++++++++++++++++++++++++++++++++-------
2 files changed, 187 insertions(+), 52 deletions(-)
diff --git a/thunar/thunar-shortcut.c b/thunar/thunar-shortcut.c
index d3d8110..40ed477 100644
--- a/thunar/thunar-shortcut.c
+++ b/thunar/thunar-shortcut.c
@@ -110,8 +110,6 @@ static gboolean thunar_shortcut_focus (GtkWidget
GtkDirectionType direction);
static gboolean thunar_shortcut_focus_in_event (GtkWidget *widget,
GdkEventFocus *event);
-static gboolean thunar_shortcut_focus_out_event (GtkWidget *widget,
- GdkEventFocus *event);
static void thunar_shortcut_size_request (GtkWidget *widget,
GtkRequisition *requisition);
static void thunar_shortcut_button_state_changed (ThunarShortcut *shortcut,
@@ -242,7 +240,6 @@ thunar_shortcut_class_init (ThunarShortcutClass *klass)
gtkwidget_class->expose_event = thunar_shortcut_expose_event;
gtkwidget_class->focus = thunar_shortcut_focus;
gtkwidget_class->focus_in_event = thunar_shortcut_focus_in_event;
- gtkwidget_class->focus_out_event = thunar_shortcut_focus_out_event;
gtkwidget_class->size_request = thunar_shortcut_size_request;
g_object_class_install_property (gobject_class,
@@ -928,18 +925,6 @@ thunar_shortcut_focus_in_event (GtkWidget *widget,
-static gboolean
-thunar_shortcut_focus_out_event (GtkWidget *widget,
- GdkEventFocus *event)
-{
- _thunar_return_val_if_fail (THUNAR_IS_SHORTCUT (widget), FALSE);
-
- gtk_widget_set_state (widget, GTK_STATE_NORMAL);
- return TRUE;
-}
-
-
-
static void
thunar_shortcut_size_request (GtkWidget *widget,
GtkRequisition *requisition)
diff --git a/thunar/thunar-shortcuts-view.c b/thunar/thunar-shortcuts-view.c
index 41c6f55..b56422a 100644
--- a/thunar/thunar-shortcuts-view.c
+++ b/thunar/thunar-shortcuts-view.c
@@ -74,40 +74,57 @@ enum
-#if 0
-typedef void (*ThunarShortcutsViewForeachRowFunc) (ThunarShortcutsView *view,
- ThunarShortcutRow *row,
- gpointer user_data);
-#endif
-
-
-
-static void thunar_shortcuts_view_constructed (GObject *object);
-static void thunar_shortcuts_view_finalize (GObject *object);
-static void thunar_shortcuts_view_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-static void thunar_shortcuts_view_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-static gboolean thunar_shortcuts_view_load_system_shortcuts (gpointer user_data);
-static void thunar_shortcuts_view_create_home_shortcut (ThunarShortcutsView *view);
-static void thunar_shortcuts_view_create_desktop_shortcut (ThunarShortcutsView *view);
-static void thunar_shortcuts_view_create_trash_shortcut (ThunarShortcutsView *view);
-static void thunar_shortcuts_view_create_network_shortcut (ThunarShortcutsView *view);
-static gboolean thunar_shortcuts_view_load_user_dirs (gpointer user_data);
-static gboolean thunar_shortcuts_view_load_bookmarks (gpointer user_data);
-static gboolean thunar_shortcuts_view_load_volumes (gpointer user_data);
-static void thunar_shortcuts_view_volume_added (ThunarShortcutsView *view,
- GVolume *volume,
- GVolumeMonitor *monitor);
-static void thunar_shortcuts_view_mount_added (ThunarShortcutsView *view,
- GMount *mount,
- GVolumeMonitor *monitor);
-static void thunar_shortcuts_view_add_shortcut (ThunarShortcutsView *view,
- ThunarShortcut *shortcut);
+typedef void (*ThunarShortcutsViewForeachGroupFunc) (ThunarShortcutsView *view,
+ ThunarShortcutGroup *group,
+ gpointer user_data);
+
+
+
+static void thunar_shortcuts_view_constructed (GObject *object);
+static void thunar_shortcuts_view_finalize (GObject *object);
+static void thunar_shortcuts_view_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void thunar_shortcuts_view_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static gboolean thunar_shortcuts_view_load_system_shortcuts (gpointer user_data);
+static void thunar_shortcuts_view_create_home_shortcut (ThunarShortcutsView *view);
+static void thunar_shortcuts_view_create_desktop_shortcut (ThunarShortcutsView *view);
+static void thunar_shortcuts_view_create_trash_shortcut (ThunarShortcutsView *view);
+static void thunar_shortcuts_view_create_network_shortcut (ThunarShortcutsView *view);
+static gboolean thunar_shortcuts_view_load_user_dirs (gpointer user_data);
+static gboolean thunar_shortcuts_view_load_bookmarks (gpointer user_data);
+static gboolean thunar_shortcuts_view_load_volumes (gpointer user_data);
+static void thunar_shortcuts_view_volume_added (ThunarShortcutsView *view,
+ GVolume *volume,
+ GVolumeMonitor *monitor);
+static void thunar_shortcuts_view_mount_added (ThunarShortcutsView *view,
+ GMount *mount,
+ GVolumeMonitor *monitor);
+static void thunar_shortcuts_view_add_shortcut (ThunarShortcutsView *view,
+ ThunarShortcut *shortcut);
+static void thunar_shortcuts_view_shortcut_activated (ThunarShortcutsView *view,
+ ThunarFile *file,
+ gboolean open_in_new_window,
+ ThunarShortcut *shortcut);
+static void thunar_shortcuts_view_shortcut_state_changed (ThunarShortcutsView *view,
+ GtkStateType previous_state,
+ ThunarShortcut *shortcut);
+static void thunar_shortcuts_view_unselect_shortcuts (ThunarShortcutsView *view,
+ ThunarShortcutGroup *group,
+ gpointer user_data);
+static void thunar_shortcuts_view_unprelight_shortcuts (ThunarShortcutsView *view,
+ ThunarShortcutGroup *group,
+ gpointer user_data);
+static void thunar_shortcuts_view_foreach_group (ThunarShortcutsView *view,
+ ThunarShortcutsViewForeachGroupFunc func,
+ gpointer user_data);
+static void thunar_shortcuts_view_open (ThunarShortcutsView *view,
+ ThunarFile *file,
+ gboolean new_window);
#if 0
static void thunar_shortcuts_view_row_inserted (ThunarShortcutsView *view,
GtkTreePath *path,
@@ -1725,9 +1742,142 @@ thunar_shortcuts_view_add_shortcut (ThunarShortcutsView *view,
}
g_list_free (children);
- /* TODO improve this error message by including the URI or volume/mount name */
- if (!shortcut_inserted)
- g_warning ("Failed to add a shortcut to the side pane.");
+ if (shortcut_inserted)
+ {
+ /* connect to the activated signal */
+ g_signal_connect_swapped (shortcut, "activated",
+ G_CALLBACK (thunar_shortcuts_view_shortcut_activated),
+ view);
+
+ /* react on state changes */
+ g_signal_connect_swapped (shortcut, "state-changed",
+ G_CALLBACK (thunar_shortcuts_view_shortcut_state_changed),
+ view);
+ }
+ else
+ {
+ /* TODO improve this error message by including the URI or volume/mount name */
+ g_warning ("Failed to add a shortcut to the side pane.");
+ }
+}
+
+
+
+static void
+thunar_shortcuts_view_shortcut_activated (ThunarShortcutsView *view,
+ ThunarFile *file,
+ gboolean open_in_new_window,
+ ThunarShortcut *shortcut)
+{
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUTS_VIEW (view));
+ _thunar_return_if_fail (THUNAR_IS_FILE (file));
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUT (shortcut));
+
+ /* TODO cancel all other pending activations */
+
+ /* open the activated shortcut */
+ thunar_shortcuts_view_open (view, file, open_in_new_window);
+}
+
+
+
+static void
+thunar_shortcuts_view_shortcut_state_changed (ThunarShortcutsView *view,
+ GtkStateType previous_state,
+ ThunarShortcut *shortcut)
+{
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUTS_VIEW (view));
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUT (shortcut));
+
+ /* check if the shortcut has been selected or highlighted */
+ if (gtk_widget_get_state (GTK_WIDGET (shortcut)) == GTK_STATE_SELECTED)
+ {
+ /* unselect all other shortcuts */
+ thunar_shortcuts_view_foreach_group (view,
+ thunar_shortcuts_view_unselect_shortcuts,
+ shortcut);
+ }
+ else if (gtk_widget_get_state (GTK_WIDGET (shortcut)) == GTK_STATE_PRELIGHT)
+ {
+ /* unprelight all other shortcuts */
+ thunar_shortcuts_view_foreach_group (view,
+ thunar_shortcuts_view_unprelight_shortcuts,
+ shortcut);
+ }
+}
+
+
+
+static void
+thunar_shortcuts_view_unselect_shortcuts (ThunarShortcutsView *view,
+ ThunarShortcutGroup *group,
+ gpointer user_data)
+{
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUTS_VIEW (view));
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUT_GROUP (group));
+
+ thunar_shortcut_group_unselect_shortcuts (group, THUNAR_SHORTCUT (user_data));
+}
+
+
+
+static void
+thunar_shortcuts_view_unprelight_shortcuts (ThunarShortcutsView *view,
+ ThunarShortcutGroup *group,
+ gpointer user_data)
+{
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUTS_VIEW (view));
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUT_GROUP (group));
+
+ thunar_shortcut_group_unprelight_shortcuts (group, THUNAR_SHORTCUT (user_data));
+}
+
+
+
+static void
+thunar_shortcuts_view_foreach_group (ThunarShortcutsView *view,
+ ThunarShortcutsViewForeachGroupFunc func,
+ gpointer user_data)
+{
+ GList *children;
+ GList *iter;
+
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUTS_VIEW (view));
+
+ children = gtk_container_get_children (GTK_CONTAINER (view->group_box));
+
+ for (iter = children; iter != NULL; iter = iter->next)
+ (*func) (view, THUNAR_SHORTCUT_GROUP (iter->data), user_data);
+
+ g_list_free (children);
+}
+
+
+
+static void
+thunar_shortcuts_view_open (ThunarShortcutsView *view,
+ ThunarFile *file,
+ gboolean new_window)
+{
+ ThunarApplication *application;
+
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUTS_VIEW (view));
+ _thunar_return_if_fail (THUNAR_IS_FILE (file));
+
+ if (new_window)
+ {
+ /* open the file in a new window */
+ application = thunar_application_get ();
+ thunar_application_open_window (application, file,
+ gtk_widget_get_screen (GTK_WIDGET (view)),
+ NULL);
+ g_object_unref (application);
+ }
+ else
+ {
+ /* invoke the signal to change to the folder */
+ g_signal_emit (view, view_signals[SHORTCUT_ACTIVATED], 0, file);
+ }
}
More information about the Xfce4-commits
mailing list