static void on_activate(InfGtkBrowserView* view, GtkTreeIter* iter, gpointer user_data) { InfcBrowser* browser; InfcBrowserIter* browser_iter; gtk_tree_model_get( GTK_TREE_MODEL(inf_gtk_browser_view_get_model(view)), iter, INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, INF_GTK_BROWSER_MODEL_COL_NODE, &browser_iter, -1 ); /* Subscribe, if possible and not already */ if(!infc_browser_iter_get_session(browser, browser_iter) && !infc_browser_iter_get_subscribe_request(browser, browser_iter) && infc_browser_iter_get_plugin(browser, browser_iter) != NULL) { infc_browser_iter_subscribe_session(browser, browser_iter); } infc_browser_iter_free(browser_iter); g_object_unref(browser); }
static void update_sensitivity (GeditCollaborationWindowHelper *helper) { gboolean has_selection; GtkTreeIter selected; GtkTreeIter sorted; InfcBrowser *browser = NULL; InfDiscovery *discovery = NULL; GtkTreeModel *model; GtkAction *action; GtkTreePath *path; gboolean toplevel = FALSE; model = GTK_TREE_MODEL (helper->priv->browser_store); has_selection = inf_gtk_browser_view_get_selected (INF_GTK_BROWSER_VIEW (helper->priv->browser_view), &sorted); if (has_selection) { gtk_tree_model_sort_convert_iter_to_child_iter ( GTK_TREE_MODEL_SORT ( inf_gtk_browser_view_get_model ( INF_GTK_BROWSER_VIEW (helper->priv->browser_view) ) ), &selected, &sorted ); } if (has_selection) { /* Check if the iter is a top-level (aka. browser node) */ gtk_tree_model_get (model, &selected, INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, INF_GTK_BROWSER_MODEL_COL_DISCOVERY, &discovery, -1); path = gtk_tree_model_get_path (model, &selected); toplevel = gtk_tree_path_get_depth (path) == 1; gtk_tree_path_free (path); } gtk_action_group_set_sensitive (get_action_group (helper, "action_group_connected"), browser != NULL && infc_browser_get_status (browser) == INFC_BROWSER_CONNECTED); action = get_action (helper, "SessionDisconnect"); gtk_action_set_sensitive (action, toplevel && browser != NULL && infc_browser_get_status (browser) != INFC_BROWSER_DISCONNECTED); /* Handle other actions manually */ action = get_action (helper, "ItemDelete"); gtk_action_set_sensitive (action, has_selection && (!toplevel || ( discovery == NULL && (browser == NULL || infc_browser_get_status (browser) != INFC_BROWSER_CONNECTED)))); action = get_action (helper, "BookmarkEdit"); gtk_action_set_sensitive (action, has_selection && discovery == NULL && toplevel); if (browser) { g_object_unref (browser); } if (discovery) { g_object_unref (discovery); } }
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); } }