| 43 | | |
|---|
| 44 | | |
|---|
| | 43 | static void |
|---|
| | 44 | status_update (GObject *sender, TnyStatus *status, gpointer user_data) |
|---|
| | 45 | { |
|---|
| | 46 | TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (user_data); |
|---|
| | 47 | |
|---|
| | 48 | if (priv->shell) |
|---|
| | 49 | gtk_progress_set_percentage (tmut_shell_window_get_progress (priv->shell), |
|---|
| | 50 | tny_status_get_fraction (status)); |
|---|
| | 51 | |
|---|
| | 52 | return; |
|---|
| | 53 | } |
|---|
| | 54 | |
|---|
| | 55 | |
|---|
| | 56 | static void |
|---|
| | 57 | on_copy_done (TnyFolder *folder, gboolean canceled, TnyFolderStore *into, TnyFolder *new_folder, GError *err, gpointer user_data) |
|---|
| | 58 | { |
|---|
| | 59 | TMutMenuView *self = TMUT_MENU_VIEW (user_data); |
|---|
| | 60 | TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (self); |
|---|
| | 61 | gchar *msg = err->message; |
|---|
| | 62 | |
|---|
| | 63 | if (canceled) |
|---|
| | 64 | msg = "User canceled the operation"; |
|---|
| | 65 | |
|---|
| | 66 | if (err || canceled) |
|---|
| | 67 | { |
|---|
| | 68 | GtkWidget *dialog = gtk_message_dialog_new ( |
|---|
| | 69 | GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (priv->shell))), |
|---|
| | 70 | GTK_DIALOG_DESTROY_WITH_PARENT, |
|---|
| | 71 | GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, msg); |
|---|
| | 72 | g_signal_connect_swapped (dialog, "response", |
|---|
| | 73 | G_CALLBACK (gtk_widget_destroy), dialog); |
|---|
| | 74 | gtk_widget_show_all (dialog); |
|---|
| | 75 | g_error_free (err); |
|---|
| | 76 | } |
|---|
| | 77 | |
|---|
| | 78 | g_object_unref (user_data); |
|---|
| | 79 | return; |
|---|
| | 80 | } |
|---|
| 49 | | |
|---|
| 50 | | g_print ("move folder\n"); |
|---|
| | 85 | TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (self); |
|---|
| | 86 | GtkTreeSelection *selection = gtk_tree_view_get_selection (priv->folders_treeview); |
|---|
| | 87 | GtkTreeModel *model; |
|---|
| | 88 | GtkTreeIter iter; |
|---|
| | 89 | |
|---|
| | 90 | if (gtk_tree_selection_get_selected (selection, &model, &iter)) |
|---|
| | 91 | { |
|---|
| | 92 | gint type; |
|---|
| | 93 | gtk_tree_model_get (model, &iter, |
|---|
| | 94 | TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, |
|---|
| | 95 | &type, -1); |
|---|
| | 96 | |
|---|
| | 97 | if (type != TNY_FOLDER_TYPE_ROOT) |
|---|
| | 98 | { |
|---|
| | 99 | TnyFolder *folder; |
|---|
| | 100 | TMutFolderView *view; |
|---|
| | 101 | |
|---|
| | 102 | gtk_tree_model_get (model, &iter, |
|---|
| | 103 | TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, |
|---|
| | 104 | &folder, -1); |
|---|
| | 105 | if (folder) { |
|---|
| | 106 | TnyFolderStore *into = NULL; |
|---|
| | 107 | gboolean del_originals = TRUE; |
|---|
| | 108 | |
|---|
| | 109 | /* Select destination folder */ |
|---|
| | 110 | |
|---|
| | 111 | if (into) |
|---|
| | 112 | tny_folder_copy_async (folder, into, |
|---|
| | 113 | tny_folder_get_name (folder), |
|---|
| | 114 | del_originals, on_copy_done, status_update, |
|---|
| | 115 | g_object_ref (self)); |
|---|
| | 116 | |
|---|
| | 117 | g_object_unref (folder); |
|---|
| | 118 | } |
|---|
| | 119 | } |
|---|
| | 120 | } |
|---|
| 58 | | |
|---|
| 59 | | g_print ("create folder\n"); |
|---|
| | 128 | TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (self); |
|---|
| | 129 | GtkTreeSelection *selection = gtk_tree_view_get_selection (priv->folders_treeview); |
|---|
| | 130 | GtkTreeModel *model; |
|---|
| | 131 | GtkTreeIter iter; |
|---|
| | 132 | |
|---|
| | 133 | if (gtk_tree_selection_get_selected (selection, &model, &iter)) |
|---|
| | 134 | { |
|---|
| | 135 | gint type; |
|---|
| | 136 | gtk_tree_model_get (model, &iter, |
|---|
| | 137 | TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, |
|---|
| | 138 | &type, -1); |
|---|
| | 139 | if (type != TNY_FOLDER_TYPE_ROOT) |
|---|
| | 140 | { |
|---|
| | 141 | TnyFolderStore *folderstore; |
|---|
| | 142 | GtkWidget *dialog, *entry; |
|---|
| | 143 | gint result; |
|---|
| | 144 | |
|---|
| | 145 | gtk_tree_model_get (model, &iter, |
|---|
| | 146 | TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, |
|---|
| | 147 | &folderstore, -1); |
|---|
| | 148 | |
|---|
| | 149 | dialog = gtk_dialog_new_with_buttons ("Create a folder", |
|---|
| | 150 | GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (self))), |
|---|
| | 151 | GTK_DIALOG_MODAL, |
|---|
| | 152 | GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, |
|---|
| | 153 | GTK_STOCK_CANCEL,GTK_RESPONSE_REJECT, |
|---|
| | 154 | NULL); |
|---|
| | 155 | |
|---|
| | 156 | entry = gtk_entry_new (); |
|---|
| | 157 | gtk_entry_set_text (GTK_ENTRY (entry), "New folder"); |
|---|
| | 158 | gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), entry); |
|---|
| | 159 | gtk_widget_show (entry); |
|---|
| | 160 | |
|---|
| | 161 | if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) |
|---|
| | 162 | { |
|---|
| | 163 | GError *err = NULL; |
|---|
| | 164 | const gchar *newname = gtk_entry_get_text (GTK_ENTRY (entry)); |
|---|
| | 165 | TnyFolder *created = tny_folder_store_create_folder (folderstore, newname, &err); |
|---|
| | 166 | if (created) /* Can be NULL on failure */ |
|---|
| | 167 | g_object_unref (created); |
|---|
| | 168 | if (err) { |
|---|
| | 169 | GtkWidget *edialog; |
|---|
| | 170 | gtk_widget_destroy (dialog); |
|---|
| | 171 | dialog = NULL; |
|---|
| | 172 | edialog = gtk_message_dialog_new ( |
|---|
| | 173 | GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (priv->shell))), |
|---|
| | 174 | GTK_DIALOG_DESTROY_WITH_PARENT, |
|---|
| | 175 | GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, |
|---|
| | 176 | err->message); |
|---|
| | 177 | g_signal_connect_swapped (edialog, "response", |
|---|
| | 178 | G_CALLBACK (gtk_widget_destroy), edialog); |
|---|
| | 179 | gtk_widget_show_all (edialog); |
|---|
| | 180 | g_error_free (err); |
|---|
| | 181 | } |
|---|
| | 182 | } |
|---|
| | 183 | |
|---|
| | 184 | if (dialog) |
|---|
| | 185 | gtk_widget_destroy (dialog); |
|---|
| | 186 | g_object_unref (G_OBJECT (folderstore)); |
|---|
| | 187 | } |
|---|
| | 188 | |
|---|
| | 189 | } |
|---|
| 67 | | |
|---|
| 68 | | g_print ("delete folder\n"); |
|---|
| | 197 | TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (self); |
|---|
| | 198 | GtkTreeSelection *selection = gtk_tree_view_get_selection (priv->folders_treeview); |
|---|
| | 199 | GtkTreeModel *model; |
|---|
| | 200 | GtkTreeIter iter; |
|---|
| | 201 | |
|---|
| | 202 | if (gtk_tree_selection_get_selected (selection, &model, &iter)) |
|---|
| | 203 | { |
|---|
| | 204 | gint type; |
|---|
| | 205 | |
|---|
| | 206 | gtk_tree_model_get (model, &iter, |
|---|
| | 207 | TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, |
|---|
| | 208 | &type, -1); |
|---|
| | 209 | |
|---|
| | 210 | if (type != TNY_FOLDER_TYPE_ROOT) |
|---|
| | 211 | { |
|---|
| | 212 | TnyFolder *folder; |
|---|
| | 213 | TMutFolderView *view; |
|---|
| | 214 | |
|---|
| | 215 | gtk_tree_model_get (model, &iter, |
|---|
| | 216 | TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, |
|---|
| | 217 | &folder, -1); |
|---|
| | 218 | |
|---|
| | 219 | if (folder) |
|---|
| | 220 | { |
|---|
| | 221 | gint result; |
|---|
| | 222 | GtkWidget *dialog = gtk_dialog_new_with_buttons ("Delete a folder", |
|---|
| | 223 | GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (self))), |
|---|
| | 224 | GTK_DIALOG_MODAL, |
|---|
| | 225 | GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, |
|---|
| | 226 | GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, |
|---|
| | 227 | NULL); |
|---|
| | 228 | GtkWidget *label = gtk_label_new ("Are you sure you want to delete this folder?"); |
|---|
| | 229 | |
|---|
| | 230 | gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); |
|---|
| | 231 | gtk_widget_show (label); |
|---|
| | 232 | |
|---|
| | 233 | if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) |
|---|
| | 234 | { |
|---|
| | 235 | GError *err = NULL; |
|---|
| | 236 | TnyFolderStore *store = tny_folder_get_folder_store (folder); |
|---|
| | 237 | tny_folder_store_remove_folder (store, folder, &err); |
|---|
| | 238 | if (err) { |
|---|
| | 239 | GtkWidget *edialog; |
|---|
| | 240 | gtk_widget_destroy (dialog); |
|---|
| | 241 | dialog = NULL; |
|---|
| | 242 | edialog = gtk_message_dialog_new ( |
|---|
| | 243 | GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (priv->shell))), |
|---|
| | 244 | GTK_DIALOG_DESTROY_WITH_PARENT, |
|---|
| | 245 | GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE, |
|---|
| | 246 | err->message); |
|---|
| | 247 | g_signal_connect_swapped (edialog, "response", |
|---|
| | 248 | G_CALLBACK (gtk_widget_destroy), edialog); |
|---|
| | 249 | gtk_widget_show_all (edialog); |
|---|
| | 250 | g_error_free (err); |
|---|
| | 251 | } |
|---|
| | 252 | g_object_unref (store); |
|---|
| | 253 | } |
|---|
| | 254 | if (dialog) |
|---|
| | 255 | gtk_widget_destroy (dialog); |
|---|
| | 256 | g_object_unref (folder); |
|---|
| | 257 | } |
|---|
| | 258 | } |
|---|
| | 259 | } |
|---|