static void on_item_new_response (GtkDialog *dialog, gint responseid, ItemNew *item) { gchar *name = NULL; if (responseid == GTK_RESPONSE_OK) { const gchar *text = gtk_entry_get_text (item->entry); if (!*text) { return; } name = g_strdup (text); } gtk_widget_destroy (GTK_WIDGET (dialog)); if (name) { InfcBrowserIter parent = item->iter; if (!infc_browser_iter_is_subdirectory (item->browser, &parent)) { infc_browser_iter_get_parent (item->browser, &parent); } if (item->newfile) { InfcNotePlugin *plugin; plugin = gedit_collaboration_manager_get_note_plugin (item->helper->priv->manager); infc_browser_add_note (item->browser, &parent, name, plugin, FALSE); } else { infc_browser_add_subdirectory (item->browser, &parent, name); } } g_free (name); g_object_unref (item->browser); g_slice_free (ItemNew, item); }
/* Copied from gobby: code/core/browser.cpp */ static gint compare_func (GtkTreeModel *model, GtkTreeIter *first, GtkTreeIter *second, gpointer user_data) { gint result; InfcBrowser *br_one; InfcBrowser *br_two; InfcBrowserIter *bri_one; InfcBrowserIter *bri_two; GtkTreeIter parent; result = 0; if (gtk_tree_model_iter_parent (model, &parent, first)) { g_assert (gtk_tree_model_iter_parent (model, &parent, second)); gtk_tree_model_get (model, first, INF_GTK_BROWSER_MODEL_COL_BROWSER, &br_one, INF_GTK_BROWSER_MODEL_COL_NODE, &bri_one, -1); gtk_tree_model_get (model, second, INF_GTK_BROWSER_MODEL_COL_BROWSER, &br_two, INF_GTK_BROWSER_MODEL_COL_NODE, &bri_two, -1); if (infc_browser_iter_is_subdirectory (br_one, bri_one) && !infc_browser_iter_is_subdirectory (br_two, bri_two)) { result = -1; } else if (!infc_browser_iter_is_subdirectory(br_one, bri_one) && infc_browser_iter_is_subdirectory(br_two, bri_two)) { result = 1; } g_object_unref (br_one); g_object_unref (br_two); infc_browser_iter_free (bri_one); infc_browser_iter_free (bri_two); } if (!result) { gchar* name_one; gchar* name_two; gtk_tree_model_get (model, first, INF_GTK_BROWSER_MODEL_COL_NAME, &name_one, -1); gtk_tree_model_get (model, second, INF_GTK_BROWSER_MODEL_COL_NAME, &name_two, -1); gchar* one = g_utf8_casefold (name_one, -1); gchar* two = g_utf8_casefold (name_two, -1); result = g_utf8_collate (one, two); g_free (name_one); g_free (name_two); g_free (one); g_free (two); } return result; }
static void on_browser_activate (InfGtkBrowserView *view, GtkTreeIter *iter, GeditCollaborationWindowHelper *helper) { InfcBrowser *browser; InfcBrowserIter *browser_iter; InfDiscovery *discovery; GeditCollaborationUser *user; GtkTreeIter selected; gtk_tree_model_sort_convert_iter_to_child_iter ( GTK_TREE_MODEL_SORT (inf_gtk_browser_view_get_model (view)), &selected, iter ); gtk_tree_model_get (GTK_TREE_MODEL (helper->priv->browser_store), &selected, INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, INF_GTK_BROWSER_MODEL_COL_DISCOVERY, &discovery, -1); if (browser == NULL) { if (discovery) { g_object_unref (discovery); } return; } gtk_tree_model_get (GTK_TREE_MODEL (helper->priv->browser_store), &selected, INF_GTK_BROWSER_MODEL_COL_NODE, &browser_iter, -1); if (browser_iter == NULL || infc_browser_iter_is_subdirectory (browser, browser_iter)) { g_object_unref (browser); if (browser_iter) { infc_browser_iter_free (browser_iter); } if (discovery) { g_object_unref (discovery); } return; } if (discovery) { user = gedit_collaboration_user_get_default (); } else { GeditCollaborationBookmark *bookmark; bookmark = g_object_get_data (G_OBJECT (infc_browser_get_connection (browser)), BOOKMARK_DATA_KEY); user = gedit_collaboration_bookmark_get_user (bookmark); } gedit_collaboration_manager_subscribe (helper->priv->manager, user, browser, browser_iter); if (discovery) { g_object_unref (discovery); } if (browser_iter) { infc_browser_iter_free (browser_iter); } }