void screenshot_select_area_async (SelectAreaCallback callback, gpointer callback_data) { CallbackData *cb_data; GDBusConnection *connection; cb_data = g_slice_new0 (CallbackData); cb_data->callback = callback; cb_data->callback_data = callback_data; connection = g_application_get_dbus_connection (g_application_get_default ()); g_dbus_connection_call (connection, "org.gnome.Shell.Screenshot", "/org/gnome/Shell/Screenshot", "org.gnome.Shell.Screenshot", "SelectArea", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, G_MAXINT, NULL, select_area_done, cb_data); }
static void nemo_dbus_manager_init (NemoDBusManager *self) { GDBusConnection *connection; connection = g_application_get_dbus_connection (g_application_get_default ()); self->object_manager = g_dbus_object_manager_server_new ("/org/Nemo"); self->file_operations = nemo_dbus_file_operations_skeleton_new (); g_signal_connect (self->file_operations, "handle-copy-uris", G_CALLBACK (handle_copy_uris), self); g_signal_connect (self->file_operations, "handle-copy-file", G_CALLBACK (handle_copy_file), self); g_signal_connect (self->file_operations, "handle-empty-trash", G_CALLBACK (handle_empty_trash), self); g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (self->file_operations), connection, "/org/Nemo", NULL); g_dbus_object_manager_server_set_connection (self->object_manager, connection); }
static void pdf_load_job_openoffice_missing_unoconv (PdfLoadJob *job) { GApplication *app = g_application_get_default (); GtkWidget *widget = GTK_WIDGET (gtk_application_get_active_window (GTK_APPLICATION (app))); GDBusConnection *connection = g_application_get_dbus_connection (app); guint xid = 0; GdkWindow *gdk_window; const gchar *unoconv_path[2]; gdk_window = gtk_widget_get_window (widget); if (gdk_window != NULL) xid = GDK_WINDOW_XID (gdk_window); unoconv_path[0] = "/usr/bin/unoconv"; unoconv_path[1] = NULL; g_dbus_connection_call (connection, "org.freedesktop.PackageKit", "/org/freedesktop/PackageKit", "org.freedesktop.PackageKit.Modify", "InstallProvideFiles", g_variant_new ("(u^ass)", xid, unoconv_path, "hide-confirm-deps"), NULL, G_DBUS_CALL_FLAGS_NONE, G_MAXINT, job->cancellable, openoffice_missing_unoconv_ready_cb, job); }
static void libreoffice_missing (NemoPreviewPdfLoader *self) { GApplication *app = g_application_get_default (); GtkWidget *widget = GTK_WIDGET (gtk_application_get_active_window (GTK_APPLICATION (app))); GDBusConnection *connection = g_application_get_dbus_connection (app); guint xid = 0; GdkWindow *gdk_window; const gchar *libreoffice_path[2]; gdk_window = gtk_widget_get_window (widget); if (gdk_window != NULL) xid = GDK_WINDOW_XID (gdk_window); libreoffice_path[0] = "/usr/bin/libreoffice"; libreoffice_path[1] = NULL; g_dbus_connection_call (connection, "org.freedesktop.PackageKit", "/org/freedesktop/PackageKit", "org.freedesktop.PackageKit.Modify", "InstallProvideFiles", g_variant_new ("(u^ass)", xid, libreoffice_path, "hide-confirm-deps"), NULL, G_DBUS_CALL_FLAGS_NONE, G_MAXINT, NULL, libreoffice_missing_ready_cb, self); }
static void nautilus_application_select (NautilusApplication *self, GFile **files, gint len) { GDBusConnection *connection = g_application_get_dbus_connection (G_APPLICATION (self)); GVariantBuilder builder; gint idx; gchar *uri; g_variant_builder_init (&builder, G_VARIANT_TYPE ("as")); for (idx = 0; idx < len; idx++) { uri = g_file_get_uri (files[idx]); g_variant_builder_add (&builder, "s", uri); g_free (uri); } g_dbus_connection_call (connection, NAUTILUS_FDO_DBUS_NAME, NAUTILUS_FDO_DBUS_PATH, NAUTILUS_FDO_DBUS_IFACE, "ShowItems", g_variant_new ("(ass)", &builder, ""), NULL, G_DBUS_CALL_FLAGS_NONE, G_MAXINT, NULL, select_items_ready_cb, self); g_variant_builder_clear (&builder); }
GNotificationBackend * g_notification_backend_new_default (GApplication *application) { GType backend_type; GNotificationBackend *backend; g_return_val_if_fail (G_IS_APPLICATION (application), NULL); backend_type = _g_io_module_get_default_type (G_NOTIFICATION_BACKEND_EXTENSION_POINT_NAME, "GNOTIFICATION_BACKEND", G_STRUCT_OFFSET (GNotificationBackendClass, is_supported)); backend = g_object_new (backend_type, NULL); /* Avoid ref cycle by not taking a ref to the application at all. The * backend only lives as long as the application does. */ backend->application = application; backend->dbus_connection = g_application_get_dbus_connection (application); if (backend->dbus_connection) g_object_ref (backend->dbus_connection); return backend; }
static void cc_background_panel_init (CcBackgroundPanel *self) { CcBackgroundPanelPrivate *priv; gchar *objects[] = {"background-panel", NULL }; GError *err = NULL; GtkWidget *widget; priv = self->priv = BACKGROUND_PANEL_PRIVATE (self); priv->builder = gtk_builder_new (); priv->connection = g_application_get_dbus_connection (g_application_get_default ()); gtk_builder_add_objects_from_file (priv->builder, UIDIR"/background.ui", objects, &err); if (err) { g_warning ("Could not load ui: %s", err->message); g_error_free (err); return; } priv->settings = g_settings_new (WP_PATH_ID); g_settings_delay (priv->settings); /* add the top level widget */ widget = WID ("background-panel"); gtk_container_add (GTK_CONTAINER (self), widget); gtk_widget_show_all (GTK_WIDGET (self)); /* setup preview area */ widget = WID ("background-desktop-drawingarea"); g_signal_connect (widget, "draw", G_CALLBACK (on_preview_draw), self); priv->copy_cancellable = g_cancellable_new (); priv->thumb_factory = gnome_desktop_thumbnail_factory_new (GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE); reload_current_bg (self); update_preview (priv, NULL); g_signal_connect (priv->settings, "changed", G_CALLBACK (on_settings_changed), self); widget = WID ("background-set-button"); g_signal_connect (widget, "clicked", G_CALLBACK (on_background_button_clicked), self); }
void nautilus_previewer_call_close (void) { GDBusConnection *connection = g_application_get_dbus_connection (g_application_get_default ()); /* don't autostart the previewer if it's not running */ g_dbus_connection_call (connection, PREVIEWER_DBUS_NAME, PREVIEWER_DBUS_PATH, PREVIEWER_DBUS_IFACE, "Close", NULL, NULL, G_DBUS_CALL_FLAGS_NO_AUTO_START, -1, NULL, previewer_close_ready_cb, NULL); }
static void ephy_embed_shell_setup_web_extensions_connection (EphyEmbedShell *shell) { EphyEmbedShellPrivate *priv = ephy_embed_shell_get_instance_private (shell); priv->bus = g_application_get_dbus_connection (G_APPLICATION (shell)); if (!priv->bus) { g_warning ("Application not connected to session bus"); return; } priv->web_extensions_page_created_signal_id = g_dbus_connection_signal_subscribe (priv->bus, NULL, EPHY_WEB_EXTENSION_INTERFACE, "PageCreated", EPHY_WEB_EXTENSION_OBJECT_PATH, NULL, G_DBUS_SIGNAL_FLAGS_NONE, (GDBusSignalCallback)web_extension_page_created, shell, NULL); }
void nautilus_previewer_call_show_file (const gchar *uri, guint xid, gboolean close_if_already_visible) { GDBusConnection *connection = g_application_get_dbus_connection (g_application_get_default ()); GVariant *variant; variant = g_variant_new ("(sib)", uri, xid, close_if_already_visible); g_dbus_connection_call (connection, PREVIEWER_DBUS_NAME, PREVIEWER_DBUS_PATH, PREVIEWER_DBUS_IFACE, "ShowFile", variant, NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, previewer_show_file_ready_cb, NULL); }
static void gtk_application_impl_dbus_startup (GtkApplicationImpl *impl, gboolean register_session) { GtkApplicationImplDBus *dbus = (GtkApplicationImplDBus *) impl; static gchar *client_id; GError *error = NULL; GVariant *res; dbus->session = g_application_get_dbus_connection (G_APPLICATION (impl->application)); if (!dbus->session) return; dbus->application_id = g_application_get_application_id (G_APPLICATION (impl->application)); dbus->object_path = g_application_get_dbus_object_path (G_APPLICATION (impl->application)); dbus->unique_name = g_dbus_connection_get_unique_name (dbus->session); if (client_id == NULL) { const gchar *desktop_autostart_id; desktop_autostart_id = g_getenv ("DESKTOP_AUTOSTART_ID"); /* Unset DESKTOP_AUTOSTART_ID in order to avoid child processes to * use the same client id. */ g_unsetenv ("DESKTOP_AUTOSTART_ID"); client_id = g_strdup (desktop_autostart_id ? desktop_autostart_id : ""); } g_debug ("Connecting to session manager"); dbus->sm_proxy = g_dbus_proxy_new_sync (dbus->session, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS, NULL, "org.gnome.SessionManager", "/org/gnome/SessionManager", "org.gnome.SessionManager", NULL, &error); if (error) { g_warning ("Failed to get a session proxy: %s", error->message); g_error_free (error); return; } /* FIXME: should we reuse the D-Bus application id here ? */ dbus->app_id = g_strdup (g_get_prgname ()); if (!register_session) return; g_debug ("Registering client '%s' '%s'", dbus->app_id, client_id); res = g_dbus_proxy_call_sync (dbus->sm_proxy, "RegisterClient", g_variant_new ("(ss)", dbus->app_id, client_id), G_DBUS_CALL_FLAGS_NONE, G_MAXINT, NULL, &error); if (error) { g_warning ("Failed to register client: %s", error->message); g_error_free (error); g_clear_object (&dbus->sm_proxy); return; } g_variant_get (res, "(o)", &dbus->client_path); g_variant_unref (res); g_debug ("Registered client at '%s'", dbus->client_path); dbus->client_proxy = g_dbus_proxy_new_sync (dbus->session, 0, NULL, "org.gnome.SessionManager", dbus->client_path, "org.gnome.SessionManager.ClientPrivate", NULL, &error); if (error) { g_warning ("Failed to get client proxy: %s", error->message); g_error_free (error); g_clear_object (&dbus->sm_proxy); g_free (dbus->client_path); dbus->client_path = NULL; return; } g_signal_connect (dbus->client_proxy, "g-signal", G_CALLBACK (client_proxy_signal), dbus); }
GdkPixbuf * screenshot_get_pixbuf (GdkRectangle *rectangle) { GdkPixbuf *screenshot = NULL; gchar *path, *filename, *tmpname; const gchar *method_name; GVariant *method_params; GError *error = NULL; GDBusConnection *connection; path = g_build_filename (g_get_user_cache_dir (), "gnome-screenshot", NULL); g_mkdir_with_parents (path, 0700); tmpname = g_strdup_printf ("scr-%d.png", g_random_int ()); filename = g_build_filename (path, tmpname, NULL); if (screenshot_config->take_window_shot) { method_name = "ScreenshotWindow"; method_params = g_variant_new ("(bbbs)", screenshot_config->include_border, screenshot_config->include_pointer, TRUE, /* flash */ filename); } else if (rectangle != NULL) { method_name = "ScreenshotArea"; method_params = g_variant_new ("(iiiibs)", rectangle->x, rectangle->y, rectangle->width, rectangle->height, TRUE, /* flash */ filename); } else { method_name = "Screenshot"; method_params = g_variant_new ("(bbs)", screenshot_config->include_pointer, TRUE, /* flash */ filename); } connection = g_application_get_dbus_connection (g_application_get_default ()); g_dbus_connection_call_sync (connection, "org.gnome.Shell.Screenshot", "/org/gnome/Shell/Screenshot", "org.gnome.Shell.Screenshot", method_name, method_params, NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (error == NULL) { screenshot = gdk_pixbuf_new_from_file (filename, &error); /* remove the temporary file created by the shell */ g_unlink (filename); } if (error != NULL) { g_message ("Unable to use GNOME Shell's builtin screenshot interface, " "resorting to fallback X11."); g_error_free (error); screenshot = screenshot_fallback_get_pixbuf (rectangle); } g_free (path); g_free (tmpname); g_free (filename); return screenshot; }
static void gtk_application_impl_dbus_startup (GtkApplicationImpl *impl, gboolean register_session) { GtkApplicationImplDBus *dbus = (GtkApplicationImplDBus *) impl; static gchar *client_id; GError *error = NULL; GVariant *res; gboolean same_bus; const char *bus_name; const char *client_interface; dbus->session = g_application_get_dbus_connection (G_APPLICATION (impl->application)); if (!dbus->session) goto out; dbus->application_id = g_application_get_application_id (G_APPLICATION (impl->application)); dbus->object_path = g_application_get_dbus_object_path (G_APPLICATION (impl->application)); dbus->unique_name = g_dbus_connection_get_unique_name (dbus->session); if (client_id == NULL) { const gchar *desktop_autostart_id; desktop_autostart_id = g_getenv ("DESKTOP_AUTOSTART_ID"); /* Unset DESKTOP_AUTOSTART_ID in order to avoid child processes to * use the same client id. */ g_unsetenv ("DESKTOP_AUTOSTART_ID"); client_id = g_strdup (desktop_autostart_id ? desktop_autostart_id : ""); } g_debug ("Connecting to session manager"); /* Try the GNOME session manager first */ dbus->sm_proxy = gtk_application_get_proxy_if_service_present (dbus->session, G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START | G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS, GNOME_DBUS_NAME, GNOME_DBUS_OBJECT_PATH, GNOME_DBUS_INTERFACE, &error); if (error) { g_warning ("Failed to get the GNOME session proxy: %s", error->message); g_clear_error (&error); } if (!dbus->sm_proxy) { /* Fallback to trying the Xfce session manager */ dbus->sm_proxy = gtk_application_get_proxy_if_service_present (dbus->session, G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START | G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS, XFCE_DBUS_NAME, XFCE_DBUS_OBJECT_PATH, XFCE_DBUS_INTERFACE, &error); if (error) { g_warning ("Failed to get the Xfce session proxy: %s", error->message); g_clear_error (&error); goto out; } } if (!register_session) goto out; g_debug ("Registering client '%s' '%s'", dbus->application_id, client_id); res = g_dbus_proxy_call_sync (dbus->sm_proxy, "RegisterClient", g_variant_new ("(ss)", dbus->application_id, client_id), G_DBUS_CALL_FLAGS_NONE, G_MAXINT, NULL, &error); if (error) { g_warning ("Failed to register client: %s", error->message); g_clear_error (&error); g_clear_object (&dbus->sm_proxy); goto out; } g_variant_get (res, "(o)", &dbus->client_path); g_variant_unref (res); g_debug ("Registered client at '%s'", dbus->client_path); if (g_str_equal (g_dbus_proxy_get_name (dbus->sm_proxy), GNOME_DBUS_NAME)) { bus_name = GNOME_DBUS_NAME; client_interface = GNOME_DBUS_CLIENT_INTERFACE; } else { bus_name = XFCE_DBUS_NAME; client_interface = XFCE_DBUS_CLIENT_INTERFACE; } dbus->client_proxy = g_dbus_proxy_new_sync (dbus->session, 0, NULL, bus_name, dbus->client_path, client_interface, NULL, &error); if (error) { g_warning ("Failed to get client proxy: %s", error->message); g_clear_error (&error); g_free (dbus->client_path); dbus->client_path = NULL; goto out; } g_signal_connect (dbus->client_proxy, "g-signal", G_CALLBACK (client_proxy_signal), dbus); out: same_bus = FALSE; if (dbus->session) { const gchar *id; const gchar *id2; GValue value = G_VALUE_INIT; g_value_init (&value, G_TYPE_STRING); gdk_screen_get_setting (gdk_screen_get_default (), "gtk-session-bus-id", &value); id = g_value_get_string (&value); if (id && id[0]) { res = g_dbus_connection_call_sync (dbus->session, "org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "GetId", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL); if (res) { g_variant_get (res, "(&s)", &id2); if (g_strcmp0 (id, id2) == 0) same_bus = TRUE; g_variant_unref (res); } } else same_bus = TRUE; g_value_unset (&value); } if (!same_bus) g_object_set (gtk_settings_get_default (), "gtk-shell-shows-app-menu", FALSE, "gtk-shell-shows-menubar", FALSE, NULL); if (dbus->sm_proxy == NULL) { dbus->inhibit_proxy = gtk_application_get_proxy_if_service_present (dbus->session, G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START, "org.freedesktop.portal.Desktop", "/org/freedesktop/portal/desktop", "org.freedesktop.portal.Inhibit", &error); if (error) { g_warning ("Failed to get an inhibit portal proxy: %s", error->message); g_clear_error (&error); } } }