void Gobby::OperationNew::start() { InfRequest* request; if(m_directory) { request = inf_browser_add_subdirectory( m_browser, &m_parent, m_name.c_str(), NULL, on_request_finished_static, this); } else { request = inf_browser_add_note( m_browser, &m_parent, m_name.c_str(), "InfText", NULL, NULL, TRUE, on_request_finished_static, this); } if(request != NULL) { m_request = request; g_object_ref(m_request); m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( m_directory ? _("Creating directory \"%1\"...") : _("Creating document \"%1\"..."), m_name)); } }
void Gobby::OperationOpen::read_finish() { // If the last character is a newline character, remove it. GtkTextIter end_iter, test_iter; gtk_text_buffer_get_end_iter(m_content, &end_iter); test_iter = end_iter; if(gtk_text_iter_backward_char(&test_iter)) { if(gtk_text_iter_get_char(&test_iter) == '\n') { gtk_text_buffer_delete( m_content, &test_iter, &end_iter); } } gtk_text_buffer_set_modified(m_content, FALSE); GtkTextIter insert_iter; GtkTextMark* insert = gtk_text_buffer_get_insert(m_content); gtk_text_buffer_get_iter_at_mark(m_content, &insert_iter, insert); InfUser* user = INF_USER(g_object_new( INF_TEXT_TYPE_USER, "id", 1, "flags", INF_USER_LOCAL, "name", m_preferences.user.name.get().c_str(), /* The user is made active when the user * switches to the document. */ "status", INF_USER_INACTIVE, "hue", m_preferences.user.hue.get(), "caret-position", gtk_text_iter_get_offset(&insert_iter), static_cast<void*>(NULL))); InfUserTable* user_table = inf_user_table_new(); inf_user_table_add_user(user_table, user); g_object_unref(user); InfTextGtkBuffer* text_gtk_buffer = inf_text_gtk_buffer_new(m_content, user_table); g_object_unref(user_table); ConnectionManager& connection_manager = get_browser().get_connection_manager(); InfCommunicationManager* communication_manager = connection_manager.get_communication_manager(); InfBrowser* browser = m_parent.get_browser(); InfIo* io; g_object_get(G_OBJECT(browser), "io", &io, NULL); InfTextSession* session = inf_text_session_new_with_user_table( communication_manager, INF_TEXT_BUFFER(text_gtk_buffer), io, user_table, INF_SESSION_RUNNING, NULL, NULL); g_object_unref(io); g_object_unref(text_gtk_buffer); InfRequest* request = inf_browser_add_note( m_parent.get_browser(), m_parent.get_browser_iter(), m_name.c_str(), "InfText", NULL, INF_SESSION(session), TRUE, on_request_finished_static, this); g_object_unref(session); if(request != NULL) { m_request = request; g_object_ref(m_request); // TODO: We can remove the node watch here, but need to have // the browser available in on_request_finished then. Maybe // just disconnect the signal, or bind it. } }
static void infinoted_plugin_dbus_add_node(InfinotedPluginDbus* plugin, InfinotedPluginDbusInvocation* invocation, InfBrowser* browser, const InfBrowserIter* iter) { const gchar* name; const gchar* type; GVariant* sheet_set_variant; InfAclSheetSet* sheet_set; GError* error; InfRequest* request; g_variant_get_child(invocation->parameters, 1, "&s", &name); g_variant_get_child(invocation->parameters, 2, "&s", &type); g_variant_get_child( invocation->parameters, 3, "@a{sa{sb}}", &sheet_set_variant ); error = NULL; sheet_set = infinoted_plugin_dbus_sheet_set_from_variant( sheet_set_variant, &error ); g_variant_unref(sheet_set_variant); if(error != NULL) { g_dbus_method_invocation_return_gerror(invocation->invocation, error); g_error_free(error); infinoted_plugin_dbus_invocation_free(plugin, invocation); } else { if(strcmp(type, "InfSubdirectory") == 0) { request = inf_browser_add_subdirectory( browser, iter, name, sheet_set, infinoted_plugin_dbus_add_node_finished_cb, invocation ); } else { request = inf_browser_add_note( browser, iter, name, type, sheet_set, NULL, FALSE, infinoted_plugin_dbus_add_node_finished_cb, invocation ); } if(request != NULL) { invocation->request = request; invocation->request_func = infinoted_plugin_dbus_add_node_finished_cb; } } }