[devhelp/gnome-2-32] Revert "port to GApplication (GNOME bug 624197)"



commit 91cf4c38f7b2e6c09fe4d0acb3738c5edb3df33e
Author: Frédéric Péters <fpeters 0d be>
Date:   Sat Sep 4 09:59:22 2010 +0200

    Revert "port to GApplication (GNOME bug 624197)"
    
    This reverts commit 87f2924b00e00caa06761b7b452890d7ab92f4d5.

 configure.ac  |    2 +-
 src/dh-main.c |  232 ++++++++++++++++++--------------------------------------
 2 files changed, 76 insertions(+), 158 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 16b4a32..098b8a0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -63,7 +63,7 @@ PKG_CHECK_MODULES(DEVHELP, [
   gthread-2.0 >= 2.10.0
   gtk+-2.0 >= 2.10.0
   webkit-1.0 >= 1.1.13
-  glib-2.0 >= 2.25.11
+  unique-1.0
 ])
 
 PKG_CHECK_MODULES(LIBDEVHELP, [
diff --git a/src/dh-main.c b/src/dh-main.c
index cac6533..609f9fb 100644
--- a/src/dh-main.c
+++ b/src/dh-main.c
@@ -20,12 +20,10 @@
  */
 
 #include "config.h"
-
-#include <stdlib.h>
 #include <string.h>
-
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
+#include <unique/unique.h>
 
 #ifdef GDK_WINDOWING_X11
 #include <gdk/gdkx.h>
@@ -35,6 +33,11 @@
 #include "dh-window.h"
 #include "dh-assistant.h"
 
+#define COMMAND_QUIT             1
+#define COMMAND_SEARCH           2
+#define COMMAND_SEARCH_ASSISTANT 3
+#define COMMAND_FOCUS_SEARCH     4
+#define COMMAND_RAISE            5
 
 static void
 extract_book_id (const gchar  *str,
@@ -107,127 +110,51 @@ search_assistant (DhBase      *base,
         return dh_assistant_search (DH_ASSISTANT (assistant), str);
 }
 
-
-static GApplication *application = NULL;
-
-
-static void
-dh_quit (DhBase         *base,
-	 const char     *data)
-{
-	gtk_main_quit ();
-}
-
-static void
-dh_search (DhBase       *base,
-	   const char   *data)
-{
-	GtkWidget *window;
-
-	window = dh_base_get_window (base);
-	search_normal (DH_WINDOW (window), data);
-	gtk_window_present (GTK_WINDOW (window));
-}
-
-static void
-dh_search_assistant (DhBase     *base,
-		     const char *data)
-{
-	search_assistant (base, data);
-}
-
-static void
-dh_focus_search (DhBase         *base,
-		 const char     *data)
+static UniqueResponse
+unique_app_message_cb (UniqueApp *unique_app,
+                       gint command,
+                       UniqueMessageData *data,
+                       guint timestamp,
+                       gpointer user_data)
 {
+	DhBase    *base = user_data;
+	gchar     *search_string;
 	GtkWidget *window;
 
-	window = dh_base_get_window (base);
-	dh_window_focus_search (DH_WINDOW (window));
-	gtk_window_present (GTK_WINDOW (window));
-}
+	if (command == COMMAND_QUIT) {
+		gtk_main_quit ();
+		return UNIQUE_RESPONSE_OK;
+	}
 
-static void
-dh_raise (DhBase        *base,
-	  const char    *data)
-{
-	GtkWidget *window;
+	if (command == COMMAND_SEARCH_ASSISTANT) {
+		search_string = unique_message_data_get_text(data);
+                search_assistant (base, search_string);
+		g_free (search_string);
+		return UNIQUE_RESPONSE_OK;
+	}
 
 	window = dh_base_get_window (base);
-	gtk_window_present (GTK_WINDOW (window));
-}
-
-
-enum
-{
-	COMMAND_QUIT,
-	COMMAND_SEARCH,
-	COMMAND_SEARCH_ASSISTANT,
-	COMMAND_FOCUS_SEARCH,
-	COMMAND_RAISE,
-	N_COMMANDS,
-};
-
-static const struct dh_command {
-	const gchar * const name;
-	const gchar * const description;
-	void (*handler)(DhBase *, const char *);
-} commands[N_COMMANDS] = {
-	[COMMAND_QUIT]                  = { "quit",             "quit any running devhelp",                              dh_quit },
-	[COMMAND_SEARCH]                = { "search",           "search for a keyword",                                  dh_search },
-	[COMMAND_SEARCH_ASSISTANT]      = { "search-assistant", "search and display any hit in the assitant window",     dh_search_assistant },
-	[COMMAND_FOCUS_SEARCH]          = { "focus-search",     "focus the devhelp window with the search field active", dh_focus_search },
-	[COMMAND_RAISE]                 = { "raise",            "raise any running devhelp window",                      dh_raise },
-};
-
-
-static void
-dh_action_handler (GApplication *app,
-		   gchar        *name,
-		   GVariant     *platform_data,
-		   gpointer      user_data)
-{
-	char    *data = NULL;
-	DhBase  *base;
-	guint    i;
-
-	g_return_if_fail (DH_IS_BASE (user_data));
-
-	base = DH_BASE (user_data);
-
-	if (platform_data) {
-		GVariantIter iter;
-		const char *key;
-		GVariant *value;
-
-		g_variant_iter_init (&iter, platform_data);
-		while (g_variant_iter_next (&iter, "{&sv}", &key, &value)) {
-			if (g_strcmp0 (key, "data") == 0) {
-				data = g_variant_dup_string (value, NULL);
-				g_variant_unref (value);
-				break;
-			}
-			g_variant_unref (value);
-		}
+	if (command == COMMAND_SEARCH) {
+		search_string = unique_message_data_get_text(data);
+                search_normal (DH_WINDOW (window), search_string);
+		g_free (search_string);
 	}
-
-	for (i = 0; i < N_COMMANDS; i++) {
-		if (g_strcmp0 (name, commands[i].name) == 0) {
-			commands[i].handler (base, data);
-		}
+	else if (command == COMMAND_FOCUS_SEARCH) {
+		dh_window_focus_search (DH_WINDOW (window));
 	}
 
-	g_free (data);
-}
-
-static void
-dh_register_commands (GApplication *application)
-{
-	guint i;
+#ifdef GDK_WINDOWING_X11
+#if GTK_CHECK_VERSION (2,14,0)
+	timestamp = gdk_x11_get_server_time (gtk_widget_get_window (window));
+#else
+	timestamp = gdk_x11_get_server_time (window->window);
+#endif
+#else
+	timestamp = GDK_CURRENT_TIME;
+#endif
 
-	for (i = 0; i < G_N_ELEMENTS (commands); i++) {
-		g_application_add_action (application, commands[i].name, commands[i].description);
-	}
+	gtk_window_present_with_time (GTK_WINDOW (window), timestamp);
+	return UNIQUE_RESPONSE_OK;
 }
 
 int
@@ -238,6 +165,7 @@ main (int argc, char **argv)
 	gboolean                option_quit = FALSE;
 	gboolean                option_focus_search = FALSE;
 	gboolean                option_version = FALSE;
+	UniqueApp              *unique_app;
 	DhBase                 *base;
 	GtkWidget              *window;
 	GError                 *error = NULL;
@@ -307,81 +235,71 @@ main (int argc, char **argv)
 	g_set_application_name (_("Devhelp"));
 	gtk_window_set_default_icon_name ("devhelp");
 
-	application = g_initable_new (G_TYPE_APPLICATION,
-				      NULL,
-				      NULL,
-				      "application-id", "org.gnome.Devhelp",
-				      "argv", g_variant_new_bytestring_array ((const char * const *) argv, argc),
-				      "default-quit", FALSE,
-				      NULL);
+	unique_app = unique_app_new_with_commands ("org.gnome.Devhelp", NULL,
+		"quit", COMMAND_QUIT,
+		"search", COMMAND_SEARCH,
+		"search_assistant", COMMAND_SEARCH_ASSISTANT,
+		"focus_search", COMMAND_FOCUS_SEARCH,
+		"raise", COMMAND_RAISE,
+		NULL
+		);
 
-	if (g_application_is_remote (G_APPLICATION (application))) {
-		GVariant *data = NULL;
-		GVariantBuilder builder;
-
-		g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+	if (unique_app_is_running (unique_app)) {
+		UniqueMessageData *message_data = NULL;
 
 		if (option_quit) {
-			g_application_invoke_action (G_APPLICATION (application), commands[COMMAND_QUIT].name, data);
+			unique_app_send_message (unique_app, COMMAND_QUIT, NULL);
 		}
 		else if (option_search) {
-			g_variant_builder_add (&builder, "{sv}", "data", g_variant_new_string (option_search));
-			data = g_variant_builder_end (&builder);
-
-			g_application_invoke_action (G_APPLICATION (application), commands[COMMAND_SEARCH].name, data);
-
-			g_variant_unref (data);
+			message_data = unique_message_data_new ();
+			unique_message_data_set_text (message_data, option_search, -1);
+			unique_app_send_message (unique_app, COMMAND_SEARCH, message_data);
+			unique_message_data_free (message_data);
 		}
 		else if (option_search_assistant) {
-			g_variant_builder_add (&builder, "{sv}", "data", g_variant_new_string (option_search_assistant));
-			data = g_variant_builder_end (&builder);
-
-			g_application_invoke_action (G_APPLICATION (application), commands[COMMAND_SEARCH_ASSISTANT].name, data);
-
-			g_variant_unref (data);
+			message_data = unique_message_data_new ();
+			unique_message_data_set_text (message_data, option_search_assistant, -1);
+			unique_app_send_message (unique_app, COMMAND_SEARCH_ASSISTANT, message_data);
+			unique_message_data_free (message_data);
 		}
 		else if (option_focus_search) {
-			g_application_invoke_action (G_APPLICATION (application), commands[COMMAND_FOCUS_SEARCH].name, data);
+			unique_app_send_message (unique_app, COMMAND_FOCUS_SEARCH, NULL);
 		} else {
-			g_application_invoke_action (G_APPLICATION (application), commands[COMMAND_RAISE].name, data);
+			unique_app_send_message (unique_app, COMMAND_RAISE, NULL);
 		}
 
-		gdk_notify_startup_complete ();
-		g_object_unref (application);
-		return EXIT_SUCCESS;
-	} else {
-		dh_register_commands (G_APPLICATION (application));
+		g_object_unref (unique_app);
+		return 0;
 	}
 
 	if (option_quit) {
 		/* No running Devhelps so just quit */
-		return EXIT_SUCCESS;
+		return 0;
 	}
 
 	base = dh_base_new ();
 
-	g_signal_connect (G_APPLICATION (application), "action-with-data",
-			  G_CALLBACK (dh_action_handler), base);
+	g_signal_connect (unique_app, "message-received",
+	      G_CALLBACK (unique_app_message_cb), base);
 
 	if (!option_search_assistant) {
 		window = dh_base_new_window (base);
 
-		if (option_search) {
-			search_normal (DH_WINDOW (window), option_search);
-		}
+                if (option_search) {
+                        search_normal (DH_WINDOW (window), option_search);
+                }
 
 		gtk_widget_show (window);
 	} else {
 		if (!search_assistant (base, option_search_assistant)) {
-			return EXIT_SUCCESS;
-		}
+                        return 0;
+                }
 	}
 
 	gtk_main ();
 
 	g_object_unref (base);
-	g_object_unref (application);
+	g_object_unref (unique_app);
 
-	return EXIT_SUCCESS;
+	return 0;
 }
-



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]