From 0bac84b2f8b66ad9e8b82fe6687ce14a97adfccd Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Thu, 28 Feb 2019 12:30:09 -0300 Subject: [PATCH] Working on drag & drop for activity list. --- src/dialogs/settingsdialog.c | 6 +++--- src/filetransfer/activitylist.c | 23 +++++++++++++++++------ src/include/internals.h | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/dialogs/settingsdialog.c b/src/dialogs/settingsdialog.c index 8985434..dc74e9c 100644 --- a/src/dialogs/settingsdialog.c +++ b/src/dialogs/settingsdialog.c @@ -204,7 +204,7 @@ int v3270_ft_settings_dialog_append_activity(GtkWidget *widget, GObject *activit } // Not found, insert it. - v3270_activity_list_append(dialog->queue.view,activity); + v3270_activity_list_append(dialog->queue.view,activity,FALSE); return 0; } @@ -251,7 +251,7 @@ static void insert_clicked(GtkWidget *button, V3270FTSettingsDialog *widget) } // Not found, insert it. - v3270_activity_list_append(widget->queue.view,v3270_ft_settings_create_activity(widget->settings)); + v3270_activity_list_append(widget->queue.view,v3270_ft_settings_create_activity(widget->settings),FALSE); } @@ -440,7 +440,7 @@ static void V3270FTSettingsDialog_init(V3270FTSettingsDialog *widget) v3270_ft_activity_set_remote_filename(activity,"remote---"); v3270_ft_activity_set_options(activity,LIB3270_FT_OPTION_SEND|LIB3270_FT_OPTION_ASCII|LIB3270_FT_OPTION_CRLF|LIB3270_FT_OPTION_REMAP|LIB3270_FT_OPTION_APPEND|LIB3270_FT_RECORD_FORMAT_VARIABLE); - v3270_activity_list_append(widget->queue.view,activity); + v3270_activity_list_append(widget->queue.view,activity,FALSE); #endif // DEBUG */ diff --git a/src/filetransfer/activitylist.c b/src/filetransfer/activitylist.c index 8ad288c..3285db6 100644 --- a/src/filetransfer/activitylist.c +++ b/src/filetransfer/activitylist.c @@ -138,9 +138,9 @@ g_object_set(G_OBJECT(cell),"text",v3270_ft_activity_get_remote_filename(activity),NULL); } - gboolean v3270_activity_list_append_filename(GtkWidget *widget, const gchar *filename) + gboolean v3270_activity_list_append_filename(GtkWidget *widget, const gchar *filename, gboolean select) { - debug("%s(%s)",__FUNCTION__,filename); + debug("%s(%s,%s)",__FUNCTION__,filename,select ? "SELECT" : "NO-SELECT"); GtkTreeModel * model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); GtkTreeIter iter; @@ -155,6 +155,10 @@ if(activity && !strcmp(filename,v3270_ft_activity_get_local_filename(activity))) { debug("%s already in the list",filename); + if(select) + { + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)),&iter); + } return FALSE; } @@ -164,7 +168,7 @@ } // Append filename - v3270_activity_list_append(widget,v3270_ft_activity_new_from_filename(filename)); + v3270_activity_list_append(widget,v3270_ft_activity_new_from_filename(filename),select); return TRUE; } @@ -178,7 +182,7 @@ for(ix = 0; uris[ix]; ix++) { if(!g_ascii_strncasecmp("file:///",uris[ix],8)) { - if(v3270_activity_list_append_filename(widget,uris[ix]+7)) + if(v3270_activity_list_append_filename(widget,uris[ix]+7,TRUE)) rc++; } } @@ -225,6 +229,7 @@ 0, NULL ); + gtk_tree_view_set_activate_on_single_click(GTK_TREE_VIEW(widget),TRUE); v3270_drag_dest_set(GTK_WIDGET(widget), G_CALLBACK(drag_data_received)); } @@ -234,7 +239,7 @@ return g_object_new(GTK_TYPE_V3270_FT_ACTIVITY_LIST, NULL); } - void v3270_activity_list_append(GtkWidget *widget, GObject *activity) + void v3270_activity_list_append(GtkWidget *widget, GObject *activity, gboolean select) { GtkTreeModel * model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); GtkTreeIter iter; @@ -242,6 +247,12 @@ gtk_list_store_set((GtkListStore *) model, &iter, 0, activity, -1); g_object_ref_sink(activity); + if(select) + { + debug("%s: Selecting inserted activity",__FUNCTION__); + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)),&iter); + } + } void v3270_activity_list_remove(GtkWidget *widget, GObject *activity) @@ -283,7 +294,7 @@ // Create new activity GObject * activity = v3270_ft_activity_new(); v3270_ft_activity_set_from_context(activity,context); - v3270_activity_list_append(GTK_WIDGET(widget), activity); + v3270_activity_list_append(GTK_WIDGET(widget), activity, FALSE); } } diff --git a/src/include/internals.h b/src/include/internals.h index 9704e74..e4c4191 100644 --- a/src/include/internals.h +++ b/src/include/internals.h @@ -74,7 +74,7 @@ typedef struct _V3270FTActivityListClass V3270FTActivityListClass; G_GNUC_INTERNAL GtkWidget * v3270_activity_list_new(); - G_GNUC_INTERNAL void v3270_activity_list_append(GtkWidget *widget, GObject *activity); + G_GNUC_INTERNAL void v3270_activity_list_append(GtkWidget *widget, GObject *activity, gboolean select); G_GNUC_INTERNAL void v3270_activity_list_remove(GtkWidget *widget, GObject *activity); G_GNUC_INTERNAL void v3270_activity_list_load(GtkWidget *widget); G_GNUC_INTERNAL void v3270_activity_list_save(GtkWidget *widget); -- libgit2 0.21.2