[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