Implement MidoriApp based on libOsso application interface
This commit is contained in:
parent
ae0c01705a
commit
0f156fa932
2 changed files with 90 additions and 29 deletions
|
@ -50,10 +50,6 @@
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAVE_HILDON
|
|
||||||
#include <libosso.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_SIGNAL_H
|
#ifdef HAVE_SIGNAL_H
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -1645,9 +1641,6 @@ main (int argc,
|
||||||
sqlite3* db;
|
sqlite3* db;
|
||||||
gint max_history_age;
|
gint max_history_age;
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_HILDON
|
|
||||||
osso_context_t* osso_context;
|
|
||||||
#endif
|
|
||||||
gint clear_prefs = MIDORI_CLEAR_NONE;
|
gint clear_prefs = MIDORI_CLEAR_NONE;
|
||||||
|
|
||||||
#if ENABLE_NLS
|
#if ENABLE_NLS
|
||||||
|
@ -1777,16 +1770,6 @@ main (int argc,
|
||||||
if (run)
|
if (run)
|
||||||
return midori_run_script (uris ? *uris : NULL);
|
return midori_run_script (uris ? *uris : NULL);
|
||||||
|
|
||||||
#if HAVE_HILDON
|
|
||||||
osso_context = osso_initialize (PACKAGE_NAME, PACKAGE_VERSION, FALSE, NULL);
|
|
||||||
|
|
||||||
if (!osso_context)
|
|
||||||
{
|
|
||||||
g_critical ("Error initializing OSSO D-Bus context - Midori");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (config && !g_path_is_absolute (config))
|
if (config && !g_path_is_absolute (config))
|
||||||
{
|
{
|
||||||
g_critical (_("The specified configuration folder is invalid."));
|
g_critical (_("The specified configuration folder is invalid."));
|
||||||
|
@ -2122,10 +2105,6 @@ main (int argc,
|
||||||
|
|
||||||
gtk_main ();
|
gtk_main ();
|
||||||
|
|
||||||
#if HAVE_HILDON
|
|
||||||
osso_deinitialize (osso_context);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
settings = katze_object_get_object (app, "settings");
|
settings = katze_object_get_object (app, "settings");
|
||||||
#if HAVE_SQLITE
|
#if HAVE_SQLITE
|
||||||
g_object_get (settings, "maximum-history-age", &max_history_age, NULL);
|
g_object_get (settings, "maximum-history-age", &max_history_age, NULL);
|
||||||
|
|
|
@ -20,7 +20,11 @@
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
|
|
||||||
#if HAVE_UNIQUE
|
#if HAVE_HILDON
|
||||||
|
#include <libosso.h>
|
||||||
|
typedef osso_context_t* MidoriAppInstance;
|
||||||
|
#define MidoriAppInstanceNull NULL
|
||||||
|
#elif HAVE_UNIQUE
|
||||||
typedef gpointer MidoriAppInstance;
|
typedef gpointer MidoriAppInstance;
|
||||||
#define MidoriAppInstanceNull NULL
|
#define MidoriAppInstanceNull NULL
|
||||||
#include <unique/unique.h>
|
#include <unique/unique.h>
|
||||||
|
@ -31,6 +35,7 @@
|
||||||
#include "socket.h"
|
#include "socket.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !HAVE_HILDON
|
||||||
typedef struct _NotifyNotification NotifyNotification;
|
typedef struct _NotifyNotification NotifyNotification;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -44,6 +49,7 @@ typedef struct
|
||||||
gboolean (*notification_show) (NotifyNotification* notification,
|
gboolean (*notification_show) (NotifyNotification* notification,
|
||||||
GError** error);
|
GError** error);
|
||||||
} LibNotifyFuncs;
|
} LibNotifyFuncs;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct _MidoriApp
|
struct _MidoriApp
|
||||||
{
|
{
|
||||||
|
@ -63,10 +69,12 @@ struct _MidoriApp
|
||||||
|
|
||||||
MidoriAppInstance instance;
|
MidoriAppInstance instance;
|
||||||
|
|
||||||
|
#if !HAVE_HILDON
|
||||||
/* libnotify handling */
|
/* libnotify handling */
|
||||||
gchar* program_notify_send;
|
gchar* program_notify_send;
|
||||||
GModule* libnotify_module;
|
GModule* libnotify_module;
|
||||||
LibNotifyFuncs libnotify_funcs;
|
LibNotifyFuncs libnotify_funcs;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _MidoriAppClass
|
struct _MidoriAppClass
|
||||||
|
@ -412,6 +420,9 @@ midori_app_command_received (MidoriApp* app,
|
||||||
|
|
||||||
if (g_str_equal (command, "activate"))
|
if (g_str_equal (command, "activate"))
|
||||||
{
|
{
|
||||||
|
if (!app->browser)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
gtk_window_set_screen (GTK_WINDOW (app->browser), screen);
|
gtk_window_set_screen (GTK_WINDOW (app->browser), screen);
|
||||||
gtk_window_present (GTK_WINDOW (app->browser));
|
gtk_window_present (GTK_WINDOW (app->browser));
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -429,6 +440,9 @@ midori_app_command_received (MidoriApp* app,
|
||||||
}
|
}
|
||||||
else if (g_str_equal (command, "open"))
|
else if (g_str_equal (command, "open"))
|
||||||
{
|
{
|
||||||
|
if (!app->browser)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
gtk_window_set_screen (GTK_WINDOW (app->browser), screen);
|
gtk_window_set_screen (GTK_WINDOW (app->browser), screen);
|
||||||
gtk_window_present (GTK_WINDOW (app->browser));
|
gtk_window_present (GTK_WINDOW (app->browser));
|
||||||
if (!uris)
|
if (!uris)
|
||||||
|
@ -479,7 +493,36 @@ midori_app_command_received (MidoriApp* app,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HAVE_UNIQUE
|
#if HAVE_HILDON
|
||||||
|
static osso_return_t
|
||||||
|
midori_app_osso_rpc_handler_cb (const gchar* interface,
|
||||||
|
const gchar* method,
|
||||||
|
GArray* arguments,
|
||||||
|
gpointer data,
|
||||||
|
osso_rpc_t * retval)
|
||||||
|
{
|
||||||
|
MidoriApp* app = MIDORI_APP (data);
|
||||||
|
GdkScreen* screen = NULL;
|
||||||
|
gboolean success;
|
||||||
|
|
||||||
|
if (!g_strcmp0 (method, "top_application"))
|
||||||
|
success = midori_app_command_received (app, "activate", NULL, screen);
|
||||||
|
else if (!g_strcmp0 (method, "new"))
|
||||||
|
success = midori_app_command_received (app, "new", NULL, screen);
|
||||||
|
else if (!g_strcmp0 (method, "open"))
|
||||||
|
{
|
||||||
|
/* FIXME: Handle arguments */
|
||||||
|
success = midori_app_command_received (app, "open", NULL, screen);
|
||||||
|
}
|
||||||
|
else if (!g_strcmp0 (method, "command"))
|
||||||
|
{
|
||||||
|
/* FIXME: Handle arguments */
|
||||||
|
success = midori_app_command_received (app, "command", NULL, screen);
|
||||||
|
}
|
||||||
|
|
||||||
|
return success ? OSSO_OK : OSSO_INVALID;
|
||||||
|
}
|
||||||
|
#elif HAVE_UNIQUE
|
||||||
static UniqueResponse
|
static UniqueResponse
|
||||||
midori_browser_message_received_cb (UniqueApp* instance,
|
midori_browser_message_received_cb (UniqueApp* instance,
|
||||||
UniqueCommand command,
|
UniqueCommand command,
|
||||||
|
@ -582,6 +625,24 @@ midori_app_create_instance (MidoriApp* app,
|
||||||
const gchar* name)
|
const gchar* name)
|
||||||
{
|
{
|
||||||
MidoriAppInstance instance;
|
MidoriAppInstance instance;
|
||||||
|
|
||||||
|
#if HAVE_HILDON
|
||||||
|
instance = osso_initialize (PACKAGE_NAME, PACKAGE_VERSION, FALSE, NULL);
|
||||||
|
|
||||||
|
if (!instance)
|
||||||
|
{
|
||||||
|
g_critical ("Error initializing OSSO D-Bus context - Midori");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (osso_rpc_set_default_cb_f (instance, midori_app_osso_rpc_handler_cb,
|
||||||
|
app) != OSSO_OK)
|
||||||
|
{
|
||||||
|
g_critical ("Error initializing remote procedure call handler - Midori");
|
||||||
|
osso_deinitialize (instance);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#else
|
||||||
GdkDisplay* display;
|
GdkDisplay* display;
|
||||||
gchar* display_name;
|
gchar* display_name;
|
||||||
gchar* instance_name;
|
gchar* instance_name;
|
||||||
|
@ -621,6 +682,7 @@ midori_app_create_instance (MidoriApp* app,
|
||||||
g_free (instance_name);
|
g_free (instance_name);
|
||||||
g_free (display_name);
|
g_free (display_name);
|
||||||
|
|
||||||
|
#endif
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -658,18 +720,23 @@ midori_app_finalize (GObject* object)
|
||||||
katze_object_assign (app->extensions, NULL);
|
katze_object_assign (app->extensions, NULL);
|
||||||
katze_object_assign (app->browsers, NULL);
|
katze_object_assign (app->browsers, NULL);
|
||||||
|
|
||||||
#if HAVE_UNIQUE
|
#if HAVE_HILDON
|
||||||
|
osso_deinitialize (app->instance);
|
||||||
|
app->instance = NULL;
|
||||||
|
#elif HAVE_UNIQUE
|
||||||
katze_object_assign (app->instance, NULL);
|
katze_object_assign (app->instance, NULL);
|
||||||
#else
|
#else
|
||||||
sock_cleanup ();
|
sock_cleanup ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !HAVE_HILDON
|
||||||
if (app->libnotify_module)
|
if (app->libnotify_module)
|
||||||
{
|
{
|
||||||
app->libnotify_funcs.uninit ();
|
app->libnotify_funcs.uninit ();
|
||||||
g_module_close (app->libnotify_module);
|
g_module_close (app->libnotify_module);
|
||||||
}
|
}
|
||||||
katze_assign (app->program_notify_send, NULL);
|
katze_assign (app->program_notify_send, NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
G_OBJECT_CLASS (midori_app_parent_class)->finalize (object);
|
G_OBJECT_CLASS (midori_app_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
@ -799,7 +866,12 @@ midori_app_instance_is_running (MidoriApp* app)
|
||||||
|
|
||||||
if (app->instance == MidoriAppInstanceNull)
|
if (app->instance == MidoriAppInstanceNull)
|
||||||
app->instance = midori_app_create_instance (app, app->name);
|
app->instance = midori_app_create_instance (app, app->name);
|
||||||
#if HAVE_UNIQUE
|
|
||||||
|
#if HAVE_HILDON
|
||||||
|
/* FIXME: Determine if application is running already */
|
||||||
|
if (app->instance)
|
||||||
|
return FALSE;
|
||||||
|
#elif HAVE_UNIQUE
|
||||||
if (app->instance)
|
if (app->instance)
|
||||||
return unique_app_is_running (app->instance);
|
return unique_app_is_running (app->instance);
|
||||||
#else
|
#else
|
||||||
|
@ -829,7 +901,9 @@ midori_app_instance_send_activate (MidoriApp* app)
|
||||||
/* g_return_val_if_fail (MIDORI_IS_APP (app), FALSE); */
|
/* g_return_val_if_fail (MIDORI_IS_APP (app), FALSE); */
|
||||||
g_return_val_if_fail (midori_app_instance_is_running (app), FALSE);
|
g_return_val_if_fail (midori_app_instance_is_running (app), FALSE);
|
||||||
|
|
||||||
#if HAVE_UNIQUE
|
#if HAVE_HILDON
|
||||||
|
osso_application_top (app->instance, PACKAGE_NAME, NULL);
|
||||||
|
#elif HAVE_UNIQUE
|
||||||
if (app->instance)
|
if (app->instance)
|
||||||
{
|
{
|
||||||
response = unique_app_send_message (app->instance, UNIQUE_ACTIVATE, NULL);
|
response = unique_app_send_message (app->instance, UNIQUE_ACTIVATE, NULL);
|
||||||
|
@ -865,7 +939,9 @@ midori_app_instance_send_new_browser (MidoriApp* app)
|
||||||
/* g_return_val_if_fail (MIDORI_IS_APP (app), FALSE); */
|
/* g_return_val_if_fail (MIDORI_IS_APP (app), FALSE); */
|
||||||
g_return_val_if_fail (midori_app_instance_is_running (app), FALSE);
|
g_return_val_if_fail (midori_app_instance_is_running (app), FALSE);
|
||||||
|
|
||||||
#if HAVE_UNIQUE
|
#if HAVE_HILDON
|
||||||
|
osso_application_top (app->instance, PACKAGE_NAME, "new");
|
||||||
|
#elif HAVE_UNIQUE
|
||||||
if (app->instance)
|
if (app->instance)
|
||||||
{
|
{
|
||||||
response = unique_app_send_message (app->instance, UNIQUE_NEW, NULL);
|
response = unique_app_send_message (app->instance, UNIQUE_NEW, NULL);
|
||||||
|
@ -907,7 +983,9 @@ midori_app_instance_send_uris (MidoriApp* app,
|
||||||
g_return_val_if_fail (midori_app_instance_is_running (app), FALSE);
|
g_return_val_if_fail (midori_app_instance_is_running (app), FALSE);
|
||||||
g_return_val_if_fail (uris != NULL, FALSE);
|
g_return_val_if_fail (uris != NULL, FALSE);
|
||||||
|
|
||||||
#if HAVE_UNIQUE
|
#if HAVE_HILDON
|
||||||
|
/* FIXME: Implement */
|
||||||
|
#elif HAVE_UNIQUE
|
||||||
if (app->instance)
|
if (app->instance)
|
||||||
{
|
{
|
||||||
message = unique_message_data_new ();
|
message = unique_message_data_new ();
|
||||||
|
@ -957,7 +1035,9 @@ midori_app_send_command (MidoriApp* app,
|
||||||
if (!midori_app_instance_is_running (app))
|
if (!midori_app_instance_is_running (app))
|
||||||
return midori_app_command_received (app, "command", command, NULL);
|
return midori_app_command_received (app, "command", command, NULL);
|
||||||
|
|
||||||
#if HAVE_UNIQUE
|
#if HAVE_HILDON
|
||||||
|
/* FIXME: Implement */
|
||||||
|
#elif HAVE_UNIQUE
|
||||||
if (app->instance)
|
if (app->instance)
|
||||||
{
|
{
|
||||||
message = unique_message_data_new ();
|
message = unique_message_data_new ();
|
||||||
|
@ -1048,6 +1128,7 @@ midori_app_quit (MidoriApp* app)
|
||||||
static void
|
static void
|
||||||
midori_app_init_libnotify (MidoriApp* app)
|
midori_app_init_libnotify (MidoriApp* app)
|
||||||
{
|
{
|
||||||
|
#if !HAVE_HILDON
|
||||||
gint i;
|
gint i;
|
||||||
const gchar* sonames[] = { "libnotify.so", "libnotify.so.1", NULL };
|
const gchar* sonames[] = { "libnotify.so", "libnotify.so.1", NULL };
|
||||||
|
|
||||||
|
@ -1076,6 +1157,7 @@ midori_app_init_libnotify (MidoriApp* app)
|
||||||
}
|
}
|
||||||
|
|
||||||
app->program_notify_send = g_find_program_in_path ("notify-send");
|
app->program_notify_send = g_find_program_in_path ("notify-send");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue