[Xfce4-commits] r22646 - xfburn/trunk/xfburn
Jean-François Wauthy
pollux at xfce.org
Thu Aug 3 21:19:23 UTC 2006
Author: pollux
Date: 2006-08-03 21:19:22 +0000 (Thu, 03 Aug 2006)
New Revision: 22646
Modified:
xfburn/trunk/xfburn/xfburn-data-composition.c
xfburn/trunk/xfburn/xfburn-file-browser.c
Log:
improve add button (fix focus problem with the fs browser)
Modified: xfburn/trunk/xfburn/xfburn-data-composition.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-data-composition.c 2006-08-03 21:00:33 UTC (rev 22645)
+++ xfburn/trunk/xfburn/xfburn-data-composition.c 2006-08-03 21:19:22 UTC (rev 22646)
@@ -76,13 +76,14 @@
static void data_composition_action_add_selected_files (GtkAction *, XfburnDataComposition *);
static gboolean cb_treeview_button_pressed (GtkTreeView * treeview, GdkEventButton * event, XfburnDataComposition * dc);
+static void cb_treeview_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * column, XfburnDataComposition * composition);
static void cb_selection_changed (GtkTreeSelection *selection, XfburnDataComposition * dc);
static void cb_begin_burn (XfburnDataDiscUsage * du, XfburnDataComposition * dc);
-static void cell_file_edited_cb (GtkCellRenderer * renderer, gchar * path, gchar * newtext, XfburnDataComposition * dc);
+static void cb_cell_file_edited (GtkCellRenderer * renderer, gchar * path, gchar * newtext, XfburnDataComposition * dc);
-static void content_drag_data_rcv_cb (GtkWidget *, GdkDragContext *, guint, guint, GtkSelectionData *, guint, guint,
+static void cb_content_drag_data_rcv (GtkWidget *, GdkDragContext *, guint, guint, GtkSelectionData *, guint, guint,
XfburnDataComposition *);
-static void content_drag_data_get_cb (GtkWidget * widget, GdkDragContext * dc, GtkSelectionData * data, guint info,
+static void cb_content_drag_data_get (GtkWidget * widget, GdkDragContext * dc, GtkSelectionData * data, guint info,
guint time, XfburnDataComposition * content);
static gboolean add_file_to_list_with_name (const gchar *name, XfburnDataComposition * dc, GtkTreeModel * model,
@@ -320,7 +321,7 @@
cell_file = gtk_cell_renderer_text_new ();
gtk_tree_view_column_pack_start (column_file, cell_file, TRUE);
gtk_tree_view_column_set_attributes (column_file, cell_file, "text", DATA_COMPOSITION_COLUMN_CONTENT, NULL);
- g_signal_connect (G_OBJECT (cell_file), "edited", G_CALLBACK (cell_file_edited_cb), composition);
+ g_signal_connect (G_OBJECT (cell_file), "edited", G_CALLBACK (cb_cell_file_edited), composition);
g_object_set (G_OBJECT (cell_file), "editable", TRUE, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (priv->content), column_file);
@@ -331,6 +332,7 @@
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->content), -1, _("Local Path"),
gtk_cell_renderer_text_new (), "text", DATA_COMPOSITION_COLUMN_PATH, NULL);
+ g_signal_connect (G_OBJECT (priv->content), "row-activated", G_CALLBACK (cb_treeview_row_activated), composition);
g_signal_connect (G_OBJECT (priv->content), "button-press-event",
G_CALLBACK (cb_treeview_button_pressed), composition);
g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (cb_selection_changed), composition);
@@ -349,11 +351,11 @@
/* set up DnD */
gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (priv->content), GDK_BUTTON1_MASK, gte_src,
G_N_ELEMENTS (gte_src), GDK_ACTION_MOVE);
- g_signal_connect (G_OBJECT (priv->content), "drag-data-get", G_CALLBACK (content_drag_data_get_cb),
+ g_signal_connect (G_OBJECT (priv->content), "drag-data-get", G_CALLBACK (cb_content_drag_data_get),
composition);
gtk_tree_view_enable_model_drag_dest (GTK_TREE_VIEW (priv->content), gte_dest, G_N_ELEMENTS (gte_dest),
GDK_ACTION_COPY | GDK_ACTION_MOVE);
- g_signal_connect (G_OBJECT (priv->content), "drag-data-received", G_CALLBACK (content_drag_data_rcv_cb),
+ g_signal_connect (G_OBJECT (priv->content), "drag-data-received", G_CALLBACK (cb_content_drag_data_rcv),
composition);
action = gtk_action_group_get_action (priv->action_group, "remove-file");
@@ -418,6 +420,13 @@
}
static void
+cb_treeview_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * column,
+ XfburnDataComposition * composition)
+{
+ gtk_tree_view_expand_row (treeview, path, FALSE);
+}
+
+static void
cb_selection_changed (GtkTreeSelection *selection, XfburnDataComposition * dc)
{
XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
@@ -455,6 +464,23 @@
{
XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+ if ((event->button == 1) && (event->type == GDK_BUTTON_PRESS)) {
+ GtkTreePath *path;
+
+ if (gtk_tree_view_get_path_at_pos (treeview, event->x, event->y, &path, NULL, NULL, NULL)) {
+ gtk_tree_path_free (path);
+
+ return FALSE;
+ } else {
+ GtkTreeSelection *selection;
+
+ selection = gtk_tree_view_get_selection (treeview);
+ gtk_tree_selection_unselect_all (selection);
+
+ return TRUE;
+ }
+ }
+
if ((event->button == 3) && (event->type == GDK_BUTTON_PRESS)) {
GtkTreeSelection *selection;
GtkTreePath *path;
@@ -467,8 +493,8 @@
if (gtk_tree_view_get_path_at_pos (treeview, event->x, event->y, &path, NULL, NULL, NULL)) {
gtk_tree_selection_unselect_all (selection);
gtk_tree_selection_select_path (selection, path);
+ gtk_tree_path_free (path);
}
- gtk_tree_path_free (path);
menu_popup = gtk_ui_manager_get_widget (priv->ui_manager, "/popup-menu");
menuitem_remove = gtk_ui_manager_get_widget (priv->ui_manager, "/popup-menu/remove-file");
@@ -557,7 +583,7 @@
}
static void
-cell_file_edited_cb (GtkCellRenderer * renderer, gchar * path, gchar * newtext, XfburnDataComposition * dc)
+cb_cell_file_edited (GtkCellRenderer * renderer, gchar * path, gchar * newtext, XfburnDataComposition * dc)
{
XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
@@ -751,7 +777,7 @@
}
static void
-content_drag_data_get_cb (GtkWidget * widget, GdkDragContext * dc,
+cb_content_drag_data_get (GtkWidget * widget, GdkDragContext * dc,
GtkSelectionData * data, guint info, guint time, XfburnDataComposition * content)
{
if (info == DATA_COMPOSITION_DND_TARGET_INSIDE) {
@@ -997,7 +1023,7 @@
}
static void
-content_drag_data_rcv_cb (GtkWidget * widget, GdkDragContext * dc, guint x, guint y, GtkSelectionData * sd,
+cb_content_drag_data_rcv (GtkWidget * widget, GdkDragContext * dc, guint x, guint y, GtkSelectionData * sd,
guint info, guint t, XfburnDataComposition * composition)
{
GtkTreeModel *model;
Modified: xfburn/trunk/xfburn/xfburn-file-browser.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-file-browser.c 2006-08-03 21:00:33 UTC (rev 22645)
+++ xfburn/trunk/xfburn/xfburn-file-browser.c 2006-08-03 21:19:22 UTC (rev 22646)
@@ -33,12 +33,25 @@
#include "xfburn-fs-browser.h"
#include "xfburn-directory-browser.h"
+#define XFBURN_FILE_BROWSER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), XFBURN_TYPE_FILE_BROWSER, XfburnFileBrowserPrivate))
+
+typedef enum {
+ FS_BROWSER,
+ DIRECTORY_BROWSER,
+} HasFocusWidgetType;
+
+/* private struct */
+typedef struct {
+ HasFocusWidgetType has_focus;
+} XfburnFileBrowserPrivate;
+
/* prototypes */
static void xfburn_file_browser_class_init (XfburnFileBrowserClass *);
static void xfburn_file_browser_init (XfburnFileBrowser *);
static void cb_fs_browser_selection_changed (GtkTreeSelection *, XfburnFileBrowser *);
-static void cb_directory_browser_row_actived (GtkWidget *, GtkTreePath *, GtkTreeViewColumn *, XfburnFileBrowser *);
+static void cb_directory_browser_row_activated (GtkWidget *, GtkTreePath *, GtkTreeViewColumn *, XfburnFileBrowser *);
+static gboolean cb_focus_in_event (GtkWidget *widget, GdkEventFocus *event, XfburnFileBrowser *file_browser);
/* globals */
static GtkHPanedClass *parent_class = NULL;
@@ -77,6 +90,8 @@
gobject_class = G_OBJECT_CLASS (klass);
+ g_type_class_add_private (klass, sizeof (XfburnFileBrowserPrivate));
+
parent_class = g_type_class_peek_parent (klass);
}
@@ -115,12 +130,17 @@
g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (cb_fs_browser_selection_changed), file_browser);
g_signal_connect (G_OBJECT (file_browser->directory_browser), "row-activated",
- G_CALLBACK (cb_directory_browser_row_actived), file_browser);
+ G_CALLBACK (cb_directory_browser_row_activated), file_browser);
+
+ g_signal_connect (G_OBJECT (file_browser->fs_browser), "focus-in-event", G_CALLBACK (cb_focus_in_event), file_browser);
+ g_signal_connect (G_OBJECT (file_browser->directory_browser), "focus-in-event", G_CALLBACK (cb_focus_in_event), file_browser);
}
+/*************/
/* internals */
+/*************/
static void
-cb_directory_browser_row_actived (GtkWidget * treeview, GtkTreePath * path, GtkTreeViewColumn * column,
+cb_directory_browser_row_activated (GtkWidget * treeview, GtkTreePath * path, GtkTreeViewColumn * column,
XfburnFileBrowser * browser)
{
GtkTreeSelection *selection_dir, *selection_fs;
@@ -189,7 +209,23 @@
}
}
+static gboolean
+cb_focus_in_event (GtkWidget *widget, GdkEventFocus *event, XfburnFileBrowser *file_browser)
+{
+ XfburnFileBrowserPrivate *priv = XFBURN_FILE_BROWSER_GET_PRIVATE (file_browser);
+
+ if (widget == file_browser->fs_browser) {
+ priv->has_focus = FS_BROWSER;
+ } else if (widget == file_browser->directory_browser) {
+ priv->has_focus = DIRECTORY_BROWSER;
+ }
+
+ return FALSE;
+}
+
+/******************/
/* public methods */
+/******************/
GtkWidget *
xfburn_file_browser_new (void)
{
@@ -206,10 +242,12 @@
gchar *
xfburn_file_browser_get_selection (XfburnFileBrowser *browser)
{
- if (GTK_WIDGET_HAS_FOCUS (browser->fs_browser))
- return xfburn_fs_browser_get_selection (browser->fs_browser);
- else if (GTK_WIDGET_HAS_FOCUS (browser->directory_browser))
- return xfburn_directory_browser_get_selection (browser->directory_browser);
+ XfburnFileBrowserPrivate *priv = XFBURN_FILE_BROWSER_GET_PRIVATE (browser);
+ if (priv->has_focus == FS_BROWSER)
+ return xfburn_fs_browser_get_selection (XFBURN_FS_BROWSER (browser->fs_browser));
+ else if (priv->has_focus == DIRECTORY_BROWSER)
+ return xfburn_directory_browser_get_selection (XFBURN_DIRECTORY_BROWSER (browser->directory_browser));
+
return NULL;
}
More information about the Xfce4-commits
mailing list