Compare commits
3 Commits
wip/multis
...
bgo121113-
Author | SHA1 | Date | |
---|---|---|---|
|
70c9c654af | ||
|
e510cf22a9 | ||
|
107d553d5b |
@@ -195,6 +195,12 @@ typedef enum {
|
|||||||
SHORTCUT_TYPE_RECENT
|
SHORTCUT_TYPE_RECENT
|
||||||
} ShortcutType;
|
} ShortcutType;
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
CLICK_POLICY_SINGLE,
|
||||||
|
CLICK_POLICY_DOUBLE
|
||||||
|
};
|
||||||
|
|
||||||
#define MODEL_ATTRIBUTES "standard::name,standard::type,standard::display-name," \
|
#define MODEL_ATTRIBUTES "standard::name,standard::type,standard::display-name," \
|
||||||
"standard::is-hidden,standard::is-backup,standard::size," \
|
"standard::is-hidden,standard::is-backup,standard::size," \
|
||||||
"standard::content-type,time::modified"
|
"standard::content-type,time::modified"
|
||||||
@@ -732,6 +738,7 @@ _gtk_file_chooser_default_init (GtkFileChooserDefault *impl)
|
|||||||
impl->sort_order = GTK_SORT_ASCENDING;
|
impl->sort_order = GTK_SORT_ASCENDING;
|
||||||
impl->recent_manager = gtk_recent_manager_get_default ();
|
impl->recent_manager = gtk_recent_manager_get_default ();
|
||||||
impl->create_folders = TRUE;
|
impl->create_folders = TRUE;
|
||||||
|
impl->single_click_activate = FALSE;
|
||||||
|
|
||||||
gtk_orientable_set_orientation (GTK_ORIENTABLE (impl),
|
gtk_orientable_set_orientation (GTK_ORIENTABLE (impl),
|
||||||
GTK_ORIENTATION_VERTICAL);
|
GTK_ORIENTATION_VERTICAL);
|
||||||
@@ -4320,6 +4327,43 @@ list_button_press_event_cb (GtkWidget *widget,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* When single-click is enabled, display a hand when cursor
|
||||||
|
* is above a file */
|
||||||
|
static gboolean
|
||||||
|
list_motion_cb (GtkWidget *widget,
|
||||||
|
GdkEventMotion *event,
|
||||||
|
GtkFileChooserDefault *impl)
|
||||||
|
{
|
||||||
|
static GdkCursor *hand_cursor = NULL;
|
||||||
|
GdkDisplay *current_display;
|
||||||
|
|
||||||
|
if (!impl->single_click_activate || impl->has_busy_cursor)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
current_display = gtk_widget_get_display (widget);
|
||||||
|
g_assert (current_display != NULL);
|
||||||
|
|
||||||
|
if (hand_cursor != NULL &&
|
||||||
|
gdk_cursor_get_display (hand_cursor) != current_display)
|
||||||
|
{
|
||||||
|
g_object_unref (hand_cursor);
|
||||||
|
hand_cursor = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hand_cursor == NULL)
|
||||||
|
hand_cursor = gdk_cursor_new_for_display (current_display,
|
||||||
|
GDK_HAND2);
|
||||||
|
|
||||||
|
if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget),
|
||||||
|
event->x, event->y,
|
||||||
|
NULL, NULL, NULL, NULL))
|
||||||
|
gdk_window_set_cursor (gtk_widget_get_window (widget), hand_cursor);
|
||||||
|
else
|
||||||
|
gdk_window_set_cursor (gtk_widget_get_window (widget), NULL);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
OperationMode operation_mode;
|
OperationMode operation_mode;
|
||||||
gint general_column;
|
gint general_column;
|
||||||
@@ -4438,6 +4482,8 @@ create_file_list (GtkFileChooserDefault *impl)
|
|||||||
G_CALLBACK (list_popup_menu_cb), impl);
|
G_CALLBACK (list_popup_menu_cb), impl);
|
||||||
g_signal_connect (impl->browse_files_tree_view, "button-press-event",
|
g_signal_connect (impl->browse_files_tree_view, "button-press-event",
|
||||||
G_CALLBACK (list_button_press_event_cb), impl);
|
G_CALLBACK (list_button_press_event_cb), impl);
|
||||||
|
g_signal_connect (impl->browse_files_tree_view, "motion_notify_event",
|
||||||
|
G_CALLBACK (list_motion_cb), impl);
|
||||||
|
|
||||||
g_signal_connect (impl->browse_files_tree_view, "drag-data-received",
|
g_signal_connect (impl->browse_files_tree_view, "drag-data-received",
|
||||||
G_CALLBACK (file_list_drag_data_received_cb), impl);
|
G_CALLBACK (file_list_drag_data_received_cb), impl);
|
||||||
@@ -6016,6 +6062,7 @@ settings_load (GtkFileChooserDefault *impl)
|
|||||||
LocationMode location_mode;
|
LocationMode location_mode;
|
||||||
gboolean show_hidden;
|
gboolean show_hidden;
|
||||||
gboolean show_size_column;
|
gboolean show_size_column;
|
||||||
|
int click_policy
|
||||||
gint sort_column;
|
gint sort_column;
|
||||||
GtkSortType sort_order;
|
GtkSortType sort_order;
|
||||||
gint sidebar_width;
|
gint sidebar_width;
|
||||||
@@ -6024,6 +6071,7 @@ settings_load (GtkFileChooserDefault *impl)
|
|||||||
settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl));
|
settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl));
|
||||||
|
|
||||||
location_mode = g_settings_get_enum (settings, SETTINGS_KEY_LOCATION_MODE);
|
location_mode = g_settings_get_enum (settings, SETTINGS_KEY_LOCATION_MODE);
|
||||||
|
click_policy = g_settings_get_enum (impl->settings, SETTINGS_KEY_CLICK_POLICY);
|
||||||
show_hidden = g_settings_get_boolean (settings, SETTINGS_KEY_SHOW_HIDDEN);
|
show_hidden = g_settings_get_boolean (settings, SETTINGS_KEY_SHOW_HIDDEN);
|
||||||
show_size_column = g_settings_get_boolean (settings, SETTINGS_KEY_SHOW_SIZE_COLUMN);
|
show_size_column = g_settings_get_boolean (settings, SETTINGS_KEY_SHOW_SIZE_COLUMN);
|
||||||
sort_column = g_settings_get_enum (settings, SETTINGS_KEY_SORT_COLUMN);
|
sort_column = g_settings_get_enum (settings, SETTINGS_KEY_SORT_COLUMN);
|
||||||
@@ -6034,6 +6082,10 @@ settings_load (GtkFileChooserDefault *impl)
|
|||||||
|
|
||||||
gtk_file_chooser_set_show_hidden (GTK_FILE_CHOOSER (impl), show_hidden);
|
gtk_file_chooser_set_show_hidden (GTK_FILE_CHOOSER (impl), show_hidden);
|
||||||
|
|
||||||
|
impl->single_click_activate = click_policy == CLICK_POLICY_SINGLE;
|
||||||
|
_gtk_tree_view_set_single_click_activate (GTK_TREE_VIEW (impl->browse_files_tree_view),
|
||||||
|
impl->single_click_activate);
|
||||||
|
|
||||||
impl->show_size_column = show_size_column;
|
impl->show_size_column = show_size_column;
|
||||||
gtk_tree_view_column_set_visible (impl->list_size_column, show_size_column);
|
gtk_tree_view_column_set_visible (impl->list_size_column, show_size_column);
|
||||||
|
|
||||||
@@ -6258,6 +6310,8 @@ set_busy_cursor (GtkFileChooserDefault *impl,
|
|||||||
|
|
||||||
if (cursor)
|
if (cursor)
|
||||||
g_object_unref (cursor);
|
g_object_unref (cursor);
|
||||||
|
|
||||||
|
impl->has_busy_cursor = busy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Creates a sort model to wrap the file system model and sets it on the tree view */
|
/* Creates a sort model to wrap the file system model and sets it on the tree view */
|
||||||
|
@@ -35,6 +35,7 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define SETTINGS_KEY_LOCATION_MODE "location-mode"
|
#define SETTINGS_KEY_LOCATION_MODE "location-mode"
|
||||||
|
#define SETTINGS_KEY_CLICK_POLICY "click-policy"
|
||||||
#define SETTINGS_KEY_SHOW_HIDDEN "show-hidden"
|
#define SETTINGS_KEY_SHOW_HIDDEN "show-hidden"
|
||||||
#define SETTINGS_KEY_SHOW_SIZE_COLUMN "show-size-column"
|
#define SETTINGS_KEY_SHOW_SIZE_COLUMN "show-size-column"
|
||||||
#define SETTINGS_KEY_SORT_COLUMN "sort-column"
|
#define SETTINGS_KEY_SORT_COLUMN "sort-column"
|
||||||
@@ -289,6 +290,7 @@ struct _GtkFileChooserDefault
|
|||||||
guint use_preview_label : 1;
|
guint use_preview_label : 1;
|
||||||
guint select_multiple : 1;
|
guint select_multiple : 1;
|
||||||
guint show_hidden : 1;
|
guint show_hidden : 1;
|
||||||
|
guint single_click_activate : 1;
|
||||||
guint do_overwrite_confirmation : 1;
|
guint do_overwrite_confirmation : 1;
|
||||||
guint list_sort_ascending : 1;
|
guint list_sort_ascending : 1;
|
||||||
guint changing_folder : 1;
|
guint changing_folder : 1;
|
||||||
@@ -299,6 +301,7 @@ struct _GtkFileChooserDefault
|
|||||||
guint has_recent: 1;
|
guint has_recent: 1;
|
||||||
guint show_size_column : 1;
|
guint show_size_column : 1;
|
||||||
guint create_folders : 1;
|
guint create_folders : 1;
|
||||||
|
guint has_busy_cursor : 1;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
guint shortcuts_drag_outside : 1;
|
guint shortcuts_drag_outside : 1;
|
||||||
|
@@ -153,6 +153,8 @@ gint _gtk_tree_view_column_get_drag_x (GtkTreeViewColumn
|
|||||||
GtkCellAreaContext *_gtk_tree_view_column_get_context (GtkTreeViewColumn *column);
|
GtkCellAreaContext *_gtk_tree_view_column_get_context (GtkTreeViewColumn *column);
|
||||||
void _gtk_tree_view_reset_header_styles (GtkTreeView *tree_view);
|
void _gtk_tree_view_reset_header_styles (GtkTreeView *tree_view);
|
||||||
|
|
||||||
|
void _gtk_tree_view_set_single_click_activate (GtkTreeView *tree_view,
|
||||||
|
gboolean single_click_activate);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
@@ -509,6 +509,8 @@ struct _GtkTreeViewPrivate
|
|||||||
guint draw_keyfocus : 1;
|
guint draw_keyfocus : 1;
|
||||||
guint model_setup : 1;
|
guint model_setup : 1;
|
||||||
guint in_column_drag : 1;
|
guint in_column_drag : 1;
|
||||||
|
|
||||||
|
guint single_click_activate : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3399,6 +3401,44 @@ button_event_modifies_selection (GdkEventButton *event)
|
|||||||
return (event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) != 0;
|
return (event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gtk_tree_view_button_release_single_click (GtkTreeView *tree_view,
|
||||||
|
GdkEventButton *event)
|
||||||
|
{
|
||||||
|
gboolean retval = FALSE;
|
||||||
|
|
||||||
|
if (tree_view->priv->single_click_activate &&
|
||||||
|
(gtk_tree_selection_get_mode (tree_view->priv->selection) != GTK_SELECTION_MULTIPLE ||
|
||||||
|
(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) == 0))
|
||||||
|
{
|
||||||
|
GtkTreePath *path;
|
||||||
|
GtkTreeViewColumn *column;
|
||||||
|
|
||||||
|
gtk_tree_view_get_path_at_pos (tree_view,
|
||||||
|
event->x, event->y,
|
||||||
|
&path,
|
||||||
|
&column,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
if (path != NULL)
|
||||||
|
{
|
||||||
|
GtkRBTree *tree = NULL;
|
||||||
|
GtkRBNode *node = NULL;
|
||||||
|
|
||||||
|
_gtk_tree_view_find_node (tree_view, path, &tree, &node);
|
||||||
|
if (node != NULL && (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED)))
|
||||||
|
{
|
||||||
|
gtk_tree_view_row_activated (tree_view, path, column);
|
||||||
|
retval = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_tree_path_free (path);
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gtk_tree_view_button_release (GtkWidget *widget,
|
gtk_tree_view_button_release (GtkWidget *widget,
|
||||||
GdkEventButton *event)
|
GdkEventButton *event)
|
||||||
@@ -3418,7 +3458,7 @@ gtk_tree_view_button_release (GtkWidget *widget,
|
|||||||
return gtk_tree_view_button_release_column_resize (widget, event);
|
return gtk_tree_view_button_release_column_resize (widget, event);
|
||||||
|
|
||||||
if (tree_view->priv->button_pressed_node == NULL)
|
if (tree_view->priv->button_pressed_node == NULL)
|
||||||
return FALSE;
|
return gtk_tree_view_button_release_single_click (tree_view, event);
|
||||||
|
|
||||||
if (event->button == GDK_BUTTON_PRIMARY
|
if (event->button == GDK_BUTTON_PRIMARY
|
||||||
&& tree_view->priv->button_pressed_node == tree_view->priv->prelight_node)
|
&& tree_view->priv->button_pressed_node == tree_view->priv->prelight_node)
|
||||||
@@ -6989,6 +7029,15 @@ _gtk_tree_view_column_autosize (GtkTreeView *tree_view,
|
|||||||
gtk_widget_queue_resize (GTK_WIDGET (tree_view));
|
gtk_widget_queue_resize (GTK_WIDGET (tree_view));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_gtk_tree_view_set_single_click_activate (GtkTreeView *tree_view,
|
||||||
|
gboolean single_click_activate)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
|
||||||
|
|
||||||
|
tree_view->priv->single_click_activate = single_click_activate;
|
||||||
|
}
|
||||||
|
|
||||||
/* Drag-and-drop */
|
/* Drag-and-drop */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -33,10 +33,20 @@
|
|||||||
<value nick='descending' value='1'/>
|
<value nick='descending' value='1'/>
|
||||||
</enum>
|
</enum>
|
||||||
|
|
||||||
|
<enum id="org.gtk.Settings.FileChooser.ClickPolicy">
|
||||||
|
<value nick="single" value="0"/>
|
||||||
|
<value nick="double" value="1"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
<schema id='org.gtk.Settings.FileChooser' path='/org/gtk/settings/file-chooser/'>
|
<schema id='org.gtk.Settings.FileChooser' path='/org/gtk/settings/file-chooser/'>
|
||||||
<key name='last-folder-uri' type='s'>
|
<key name='last-folder-uri' type='s'>
|
||||||
<default>""</default>
|
<default>""</default>
|
||||||
</key>
|
</key>
|
||||||
|
<key name="click-policy" enum="org.gtk.Settings.FileChooser.ClickPolicy">
|
||||||
|
<default>'double'</default>
|
||||||
|
<summary>Type of click used to launch/open files</summary>
|
||||||
|
<description>Possible values are "single" to launch files on a single click, or "double" to launch them on a double click.</description>
|
||||||
|
</key>
|
||||||
<key name='location-mode' enum='org.gtk.Settings.FileChooser.LocationMode'>
|
<key name='location-mode' enum='org.gtk.Settings.FileChooser.LocationMode'>
|
||||||
<default>'path-bar'</default>
|
<default>'path-bar'</default>
|
||||||
</key>
|
</key>
|
||||||
|
Reference in New Issue
Block a user