Ejemplo n.º 1
0
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));
  	}
}
Ejemplo n.º 2
0
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;
    }
  }
}