[gnome-flashback] screenshot: own org.gnome.Shell.Screenshot dbus name
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] screenshot: own org.gnome.Shell.Screenshot dbus name
- Date: Sun, 23 Aug 2015 08:12:36 +0000 (UTC)
commit bf014a97501daf40b444ed4d240006974c0bb807
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Sun Aug 23 10:15:59 2015 +0300
screenshot: own org.gnome.Shell.Screenshot dbus name
https://bugzilla.gnome.org/show_bug.cgi?id=753529
.../libscreenshot/flashback-screenshot.c | 86 +++++++++++--------
1 files changed, 50 insertions(+), 36 deletions(-)
---
diff --git a/gnome-flashback/libscreenshot/flashback-screenshot.c
b/gnome-flashback/libscreenshot/flashback-screenshot.c
index 61395ae..03e3471 100644
--- a/gnome-flashback/libscreenshot/flashback-screenshot.c
+++ b/gnome-flashback/libscreenshot/flashback-screenshot.c
@@ -15,12 +15,14 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <config.h>
+#include "config.h"
+
#include <gtk/gtk.h>
+
#include "flashback-dbus-screenshot.h"
#include "flashback-screenshot.h"
-#define SHELL_DBUS_NAME "org.gnome.Shell"
+#define SCREENSHOT_DBUS_NAME "org.gnome.Shell.Screenshot"
#define SCREENSHOT_DBUS_PATH "/org/gnome/Shell/Screenshot"
struct _FlashbackScreenshot
@@ -28,7 +30,7 @@ struct _FlashbackScreenshot
GObject parent;
gint bus_name;
- GDBusInterfaceSkeleton *iface;
+ FlashbackDBusScreenshot *dbus_screenshot;
};
G_DEFINE_TYPE (FlashbackScreenshot, flashback_screenshot, G_TYPE_OBJECT)
@@ -110,56 +112,68 @@ handle_select_area (FlashbackDBusScreenshot *dbus_screenshot,
}
static void
-name_appeared_handler (GDBusConnection *connection,
- const gchar *name,
- const gchar *name_owner,
- gpointer user_data)
+bus_acquired_handler (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
{
FlashbackScreenshot *screenshot;
- FlashbackDBusScreenshot *skeleton;
+ FlashbackDBusScreenshot *dbus_screenshot;
+ GDBusInterfaceSkeleton *skeleton;
GError *error;
+ gboolean exported;
screenshot = FLASHBACK_SCREENSHOT (user_data);
- skeleton = flashback_dbus_screenshot_skeleton_new ();
- g_signal_connect (skeleton, "handle-screenshot",
+ dbus_screenshot = screenshot->dbus_screenshot;
+ skeleton = G_DBUS_INTERFACE_SKELETON (dbus_screenshot);
+
+ g_signal_connect (dbus_screenshot, "handle-screenshot",
G_CALLBACK (handle_screenshot), screenshot);
- g_signal_connect (skeleton, "handle-screenshot-window",
+ g_signal_connect (dbus_screenshot, "handle-screenshot-window",
G_CALLBACK (handle_screenshot_window), screenshot);
- g_signal_connect (skeleton, "handle-screenshot-area",
+ g_signal_connect (dbus_screenshot, "handle-screenshot-area",
G_CALLBACK (handle_screenshot_area), screenshot);
- g_signal_connect (skeleton, "handle-flash-area",
+ g_signal_connect (dbus_screenshot, "handle-flash-area",
G_CALLBACK (handle_flash_area), screenshot);
- g_signal_connect (skeleton, "handle-select-area",
+ g_signal_connect (dbus_screenshot, "handle-select-area",
G_CALLBACK (handle_select_area), screenshot);
error = NULL;
- screenshot->iface = G_DBUS_INTERFACE_SKELETON (skeleton);
-
- if (!g_dbus_interface_skeleton_export (screenshot->iface, connection,
- SCREENSHOT_DBUS_PATH,
- &error))
- {
- g_warning ("Failed to export interface: %s", error->message);
- g_error_free (error);
- return;
- }
+ exported = g_dbus_interface_skeleton_export (skeleton, connection,
+ SCREENSHOT_DBUS_PATH,
+ &error);
+
+ if (!exported)
+ {
+ g_warning ("Failed to export interface: %s", error->message);
+ g_error_free (error);
+ return;
+ }
}
static void
-flashback_screenshot_finalize (GObject *object)
+flashback_screenshot_dispose (GObject *object)
{
FlashbackScreenshot *screenshot;
+ GDBusInterfaceSkeleton *skeleton;
screenshot = FLASHBACK_SCREENSHOT (object);
+ if (screenshot->dbus_screenshot)
+ {
+ skeleton = G_DBUS_INTERFACE_SKELETON (screenshot->dbus_screenshot);
+
+ g_dbus_interface_skeleton_unexport (skeleton);
+ g_clear_object (&screenshot->dbus_screenshot);
+ }
+
if (screenshot->bus_name)
{
- g_bus_unwatch_name (screenshot->bus_name);
+ g_bus_unown_name (screenshot->bus_name);
screenshot->bus_name = 0;
}
- G_OBJECT_CLASS (flashback_screenshot_parent_class)->finalize (object);
+ G_OBJECT_CLASS (flashback_screenshot_parent_class)->dispose (object);
}
static void
@@ -169,23 +183,23 @@ flashback_screenshot_class_init (FlashbackScreenshotClass *screenshot_class)
object_class = G_OBJECT_CLASS (screenshot_class);
- object_class->finalize = flashback_screenshot_finalize;
+ object_class->dispose = flashback_screenshot_dispose;
}
static void
flashback_screenshot_init (FlashbackScreenshot *screenshot)
{
- screenshot->bus_name = g_bus_watch_name (G_BUS_TYPE_SESSION,
- SHELL_DBUS_NAME,
- G_BUS_NAME_WATCHER_FLAGS_NONE,
- name_appeared_handler,
- NULL,
- screenshot,
- NULL);
+ screenshot->dbus_screenshot = flashback_dbus_screenshot_skeleton_new ();
+ screenshot->bus_name = g_bus_own_name (G_BUS_TYPE_SESSION,
+ SCREENSHOT_DBUS_NAME,
+ G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
+ G_BUS_NAME_OWNER_FLAGS_REPLACE,
+ (GBusAcquiredCallback) bus_acquired_handler,
+ NULL, NULL, screenshot, NULL);
}
FlashbackScreenshot *
flashback_screenshot_new (void)
{
- return g_object_new (FLASHBACK_TYPE_SCREENSHOT, NULL);
+ return g_object_new (FLASHBACK_TYPE_SCREENSHOT, NULL);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]