Skip to content
Commits on Source (35)
include:
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/5888c7388134cbe4661600222fe9befb10441f6e/templates/fedora.yml'
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/80f87b3058efb75a1faae11826211375fba77e7f/templates/fedora.yml'
variables:
FDO_DISTRIBUTION_TAG: latest
FDO_DISTRIBUTION_VERSION: rawhide
FDO_DISTRIBUTION_VERSION: 36
FDO_UPSTREAM_REPO: gnome/gnome-settings-daemon
# Expiry sets fdo.expires on the image
FEDORA_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG"
......@@ -31,7 +31,7 @@ variables:
libcanberra-devel
libgtop2-devel
libgudev-devel
libgweather-devel
libgweather4-devel
libnotify-devel
librsvg2-devel
libwacom-devel
......@@ -103,6 +103,7 @@ stages:
##
build:
<<: *save_untracked_files
tags: ['crun']
stage: build
script:
......@@ -129,6 +130,7 @@ build:
##
test:
<<: *save_build_logs
tags: ['crun']
stage: test
dependencies:
......@@ -156,6 +158,7 @@ test:
# Runs the coverage test.
coverage:
<<: *save_build_logs
tags: ['crun']
stage: test
# Appears to be broken on Fedora Rawhide as of 2018-02-05
allow_failure: true
......@@ -203,6 +206,7 @@ pages:
##
.sanitizer: &sanitizer
<<: *save_build_logs
tags: ['crun']
stage: manual
when: manual
script:
......@@ -215,12 +219,12 @@ pages:
- $CI_PIPELINE_SOURCE == "schedule"
- $CI_COMMIT_TITLE =~ /^Update.*translation$/
asan:
<<: *sanitizer
# ASAN requires debugging capabilities
tags: [ asan ]
variables:
BUILD_OPTS: "-Db_sanitize=address"
#asan:
# <<: *sanitizer
# # ASAN requires debugging capabilities
# tags: [ asan ]
# variables:
# BUILD_OPTS: "-Db_sanitize=address"
tsan:
<<: *sanitizer
......
=============
Version 42.rc
=============
Sharing:
- Do not manage gnome-remote-desktop, now done through
gnome-control-center and systemd services
===============
Version 42.beta
===============
- Translation updates
Datetime:
- Port to GWeather 4
Media-keys:
- Fix launching of Settings actions
- Suppress UCM generic soundcard names on volume OSDs
- Remove screenshot key handling, done now in GNOME Shell
Power:
- Improve battery warning debouncing logic
XSettings:
- Adopt x11-specific code to look up GTK IM module from
gsd-keyboard
================
Version 42.alpha
================
......
......@@ -96,41 +96,6 @@
<summary>Microphone mute/unmute</summary>
<description>Binding to mute/unmute the microphone.</description>
</key>
<key name="screenshot" type="s">
<default>'Print'</default>
<summary>Take a screenshot</summary>
<description>Binding to take a screenshot.</description>
</key>
<key name="window-screenshot" type="s">
<default>'&lt;Alt&gt;Print'</default>
<summary>Take a screenshot of a window</summary>
<description>Binding to take a screenshot of a window.</description>
</key>
<key name="area-screenshot" type="s">
<default>'&lt;Shift&gt;Print'</default>
<summary>Take a screenshot of an area</summary>
<description>Binding to take a screenshot of an area.</description>
</key>
<key name="screenshot-clip" type="s">
<default>'&lt;Ctrl&gt;Print'</default>
<summary>Copy a screenshot to clipboard</summary>
<description>Binding to copy a screenshot to clipboard.</description>
</key>
<key name="window-screenshot-clip" type="s">
<default>'&lt;Ctrl&gt;&lt;Alt&gt;Print'</default>
<summary>Copy a screenshot of a window to clipboard</summary>
<description>Binding to copy a screenshot of a window to clipboard.</description>
</key>
<key name="area-screenshot-clip" type="s">
<default>'&lt;Ctrl&gt;&lt;Shift&gt;Print'</default>
<summary>Copy a screenshot of an area to clipboard</summary>
<description>Binding to copy a screenshot of an area to clipboard.</description>
</key>
<key name="screencast" type="s">
<default>'&lt;Ctrl&gt;&lt;Shift&gt;&lt;Alt&gt;R'</default>
<summary>Record a short video of the screen</summary>
<description>Binding to record a short video of the screen</description>
</key>
<key name="www" type="s">
<default>'XF86WWW'</default>
<summary>Launch web browser</summary>
......@@ -317,41 +282,6 @@
<summary>Microphone mute/unmute</summary>
<description>Binding to mute/unmute the microphone.</description>
</key>
<key name="screenshot" type="as">
<default>['Print']</default>
<summary>Take a screenshot</summary>
<description>Binding to take a screenshot.</description>
</key>
<key name="window-screenshot" type="as">
<default>['&lt;Alt&gt;Print']</default>
<summary>Take a screenshot of a window</summary>
<description>Binding to take a screenshot of a window.</description>
</key>
<key name="area-screenshot" type="as">
<default>['&lt;Shift&gt;Print']</default>
<summary>Take a screenshot of an area</summary>
<description>Binding to take a screenshot of an area.</description>
</key>
<key name="screenshot-clip" type="as">
<default>['&lt;Ctrl&gt;Print']</default>
<summary>Copy a screenshot to clipboard</summary>
<description>Binding to copy a screenshot to clipboard.</description>
</key>
<key name="window-screenshot-clip" type="as">
<default>['&lt;Ctrl&gt;&lt;Alt&gt;Print']</default>
<summary>Copy a screenshot of a window to clipboard</summary>
<description>Binding to copy a screenshot of a window to clipboard.</description>
</key>
<key name="area-screenshot-clip" type="as">
<default>['&lt;Ctrl&gt;&lt;Shift&gt;Print']</default>
<summary>Copy a screenshot of an area to clipboard</summary>
<description>Binding to copy a screenshot of an area to clipboard.</description>
</key>
<key name="screencast" type="as">
<default>['&lt;Ctrl&gt;&lt;Shift&gt;&lt;Alt&gt;R']</default>
<summary>Record a short video of the screen</summary>
<description>Binding to record a short video of the screen</description>
</key>
<key name="www" type="as">
<default>['']</default>
<summary>Launch web browser</summary>
......@@ -740,12 +670,6 @@
<summary>Bluetooth RF kill</summary>
<description>Static binding to toggle bluetooth airplane mode.</description>
</key>
<key name="max-screencast-length" type="u">
<default>30</default>
<summary>Maximum length of screen recordings</summary>
<description>The maximum length of single screen cast recordings in seconds or 0 for unlimited</description>
</key>
</schema>
<schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.settings-daemon.plugins.media-keys.custom-keybinding">
......
gnome-settings-daemon (42~rc-1ubuntu1) UNRELEASED; urgency=medium
* Merge with Debian. Remaining changes:
+ debian/control.in:
- Build-depend on accountsservice
- Drop build-dependency on libnss-dev and add to libgck-1-dev
+ debian/patches/ubuntu:
- keyboard-sync-input-sources-to-accountsservice.patch
- keyboard-Use-ibus-sources-from-locale.patch
- lid-close-suspend-support.patch
- media-keys-correct-logout-action.patch
- media-keys-restore-terminal-keyboard-shortcut-schema.patch
- print-notifications-suppress-printer-may-not-be-connected.patch
- teach-gsd-about-the-gnome-calculator-snap-.desktop-name.patch
+ debian/patches/p11-kit:
- Use p11-kit (via gck) as smartcards backend
+ debian/gnome-settings-daemon.install:
- Install apport hook
* Drop the keyboard deprecation revert since it doesn't look needed now
-- Jeremy Bicha <jeremy.bicha@canonical.com> Wed, 09 Feb 2022 15:59:26 -0500
gnome-settings-daemon (42~rc-1) experimental; urgency=medium
* New upstream release
* Drop meson build patch: applied in new release
* Revert commit switching to libgweather4: we'll do that a little later
* Revert dropping gnome-remote-desktop handling
since it needs gnome-control-center 42 first
-- Jeremy Bicha <jeremy.bicha@canonical.com> Fri, 11 Mar 2022 09:49:01 -0500
gnome-settings-daemon (42~alpha-1ubuntu1) jammy; urgency=medium
* Merge with Debian. Remaining changes:
......
From: Jeremy Bicha <jbicha@debian.org>
Date: Fri, 11 Mar 2022 09:02:56 -0500
Subject: Revert "Port to GWeather 4"
This reverts commit 66cae69ad82cfc59435016fba737ce046ffb7e66.
---
meson.build | 2 +-
plugins/datetime/weather-tz.c | 5 ++---
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/meson.build b/meson.build
index 32bffef..2c5e42e 100644
--- a/meson.build
+++ b/meson.build
@@ -96,7 +96,7 @@ gnome_desktop_dep = dependency('gnome-desktop-3.0', version: '>= 3.37.1')
gsettings_desktop_dep = dependency('gsettings-desktop-schemas', version: '>= 42')
gtk_dep = dependency('gtk+-3.0', version: '>= 3.15.3')
gtk_x11_dep = dependency('gtk+-x11-3.0')
-gweather_dep = dependency('gweather4')
+gweather_dep = dependency('gweather-3.0', version: '>= 40.alpha')
lcms_dep = dependency('lcms2', version: '>= 2.2')
libcanberra_gtk_dep = dependency('libcanberra-gtk3')
libgeoclue_dep = dependency('libgeoclue-2.0', version: '>= 2.3.1')
diff --git a/plugins/datetime/weather-tz.c b/plugins/datetime/weather-tz.c
index f2d38d9..33c8c28 100644
--- a/plugins/datetime/weather-tz.c
+++ b/plugins/datetime/weather-tz.c
@@ -22,6 +22,7 @@
#include "weather-tz.h"
#include "tz.h"
+#define GWEATHER_I_KNOW_THIS_IS_UNSTABLE
#include <libgweather/gweather.h>
static GList *
@@ -64,7 +65,6 @@ load_timezones (GList *cities)
TzLocation *loc;
const gchar *country;
const gchar *timezone_id;
- GTimeZone *tz;
gdouble latitude;
gdouble longitude;
@@ -77,8 +77,7 @@ load_timezones (GList *cities)
}
country = gweather_location_get_country (l->data);
- tz = gweather_location_get_timezone (l->data);
- timezone_id = g_time_zone_get_identifier (tz);
+ timezone_id = gweather_timezone_get_tzid (gweather_location_get_timezone (l->data));
gweather_location_get_coords (l->data,
&latitude,
&longitude);
From: Jeremy Bicha <jbicha@debian.org>
Date: Fri, 11 Mar 2022 09:06:40 -0500
Subject: Revert "sharing: Don't manage gnome-remote-desktop"
This reverts commit 58add5197e6b3552502d6b30de0c9eadf9c92014.
We need gnome-control-center 42 to land in Debian first or
at least simultaneously for this commit to be useful.
---
plugins/sharing/gsd-sharing-manager.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/plugins/sharing/gsd-sharing-manager.c b/plugins/sharing/gsd-sharing-manager.c
index aca78b3..43067cc 100644
--- a/plugins/sharing/gsd-sharing-manager.c
+++ b/plugins/sharing/gsd-sharing-manager.c
@@ -98,6 +98,7 @@ static gpointer manager_object = NULL;
static const char * const services[] = {
"rygel",
+ "gnome-remote-desktop",
"gnome-user-share-webdav"
};
......@@ -10,7 +10,7 @@ Forwarded: not-needed
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
index 58b622a..2413de4 100644
index cc60950..32bffef 100644
--- a/meson.build
+++ b/meson.build
@@ -103,7 +103,7 @@ libgeoclue_dep = dependency('libgeoclue-2.0', version: '>= 2.3.1')
......
From: Marvin Schmidt <marv@exherbo.org>
Date: Wed, 26 Jan 2022 23:08:58 +0100
Subject: meson: drop unused argument for i18n.merge_file()
Ignored in meson < 0.60.0, deprecated since 0.60.1 and fatal since 0.61.0.
https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/merge_requests/283
---
plugins/power/meson.build | 1 -
plugins/wacom/meson.build | 1 -
2 files changed, 2 deletions(-)
diff --git a/plugins/power/meson.build b/plugins/power/meson.build
index 69e619f..014bb6d 100644
--- a/plugins/power/meson.build
+++ b/plugins/power/meson.build
@@ -76,7 +76,6 @@ if host_is_linux
)
i18n.merge_file(
- policy,
input: policy_in,
output: policy,
po_dir: po_dir,
diff --git a/plugins/wacom/meson.build b/plugins/wacom/meson.build
index d8dd0ec..c00323d 100644
--- a/plugins/wacom/meson.build
+++ b/plugins/wacom/meson.build
@@ -7,7 +7,6 @@ policy_in = configure_file(
)
i18n.merge_file(
- policy,
input: policy_in,
output: policy,
po_dir: po_dir,
debian/01_debianize_xrdb.patch
debian/meson.build-Lower-polkit-requirement.patch
meson-drop-unused-argument-for-i18n.merge_file.patch
Revert-Port-to-GWeather-4.patch
Revert-sharing-Don-t-manage-gnome-remote-desktop.patch
p11-kit/smartcard-Rewrite-to-use-p11-kit-backend-via-Gck-APIs.patch
p11-kit/smartcard-manager-Use-Blocking-wait-for-slot-event-if-ava.patch
p11-kit/smartcard-manager-Only-sync-token-state-if-it-really-chan.patch
......@@ -15,5 +16,5 @@ ubuntu/media-keys-restore-terminal-keyboard-shortcut-schema.patch
ubuntu/media-keys-correct-logout-action.patch
ubuntu/lid-close-suspend-support.patch
ubuntu/keyboard-Use-ibus-sources-from-locale.patch
ubuntu/Revert-media-keys-fix-gnome-settings-desktop-file.patch
ubuntu/teach-gsd-about-the-gnome-calculator-snap-.desktop-name.patch
ubuntu/Revert-keyboard-deprecation-warning-fix.patch
From: Jeremy Bicha <jbicha@debian.org>
Date: Wed, 9 Feb 2022 15:56:34 -0500
Subject: Revert "keyboard: deprecation warning fix"
This reverts commit 95380d78c79c49cd92b36cc5b995e8a7c23ae716.
In my testing, this commit seemed to cause the keyboard plugin
to fail to load when logging in on Ubuntu but not on Debian.
I don't understand why.
---
plugins/keyboard/gsd-keyboard-manager.c | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
index 300043c..fb1e27a 100644
--- a/plugins/keyboard/gsd-keyboard-manager.c
+++ b/plugins/keyboard/gsd-keyboard-manager.c
@@ -87,7 +87,7 @@ struct _GsdKeyboardManager
GDBusProxy *localed;
GCancellable *cancellable;
- GdkSeat *user_seat;
+ GdkDeviceManager *device_manager;
guint device_added_id;
guint device_removed_id;
};
@@ -278,7 +278,7 @@ settings_changed (GSettings *settings,
}
static void
-device_added_cb (GdkSeat *user_seat,
+device_added_cb (GdkDeviceManager *device_manager,
GdkDevice *device,
GsdKeyboardManager *manager)
{
@@ -291,7 +291,7 @@ device_added_cb (GdkSeat *user_seat,
}
static void
-device_removed_cb (GdkSeat *user_seat,
+device_removed_cb (GdkDeviceManager *device_manager,
GdkDevice *device,
GsdKeyboardManager *manager)
{
@@ -305,18 +305,18 @@ device_removed_cb (GdkSeat *user_seat,
static void
set_devicepresence_handler (GsdKeyboardManager *manager)
{
- GdkSeat *user_seat;
+ GdkDeviceManager *device_manager;
if (gnome_settings_is_wayland ())
return;
- user_seat = gdk_display_get_default_seat (gdk_display_get_default ());
+ device_manager = gdk_display_get_device_manager (gdk_display_get_default ());
- manager->device_added_id = g_signal_connect (G_OBJECT (user_seat), "device-added",
- G_CALLBACK (device_added_cb), manager);
- manager->device_removed_id = g_signal_connect (G_OBJECT (user_seat), "device-removed",
- G_CALLBACK (device_removed_cb), manager);
- manager->user_seat = user_seat;
+ manager->device_added_id = g_signal_connect (G_OBJECT (device_manager), "device-added",
+ G_CALLBACK (device_added_cb), manager);
+ manager->device_removed_id = g_signal_connect (G_OBJECT (device_manager), "device-removed",
+ G_CALLBACK (device_removed_cb), manager);
+ manager->device_manager = device_manager;
}
static gboolean
@@ -790,10 +790,10 @@ gsd_keyboard_manager_stop (GsdKeyboardManager *manager)
g_clear_object (&manager->a11y_settings);
g_clear_object (&manager->localed);
- if (manager->user_seat != NULL) {
- g_signal_handler_disconnect (manager->user_seat, manager->device_added_id);
- g_signal_handler_disconnect (manager->user_seat, manager->device_removed_id);
- manager->user_seat = NULL;
+ if (manager->device_manager != NULL) {
+ g_signal_handler_disconnect (manager->device_manager, manager->device_added_id);
+ g_signal_handler_disconnect (manager->device_manager, manager->device_removed_id);
+ manager->device_manager = NULL;
}
}
From: Jeremy Bicha <jbicha@debian.org>
Date: Fri, 11 Mar 2022 10:45:31 -0500
Subject: Revert "media-keys: fix gnome settings desktop file"
This reverts commit 371a1260630035724e20972ae5bda7098e2928a7.
Ubuntu isn't getting the rename until gnome-control-center 42
---
plugins/media-keys/gsd-media-keys-manager.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index 4b45532..f4c5755 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -2436,7 +2436,7 @@ do_action (GsdMediaKeysManager *manager,
do_execute_desktop_or_desktop (manager, "org.gnome.Calculator.desktop", "gnome-calculator.desktop", timestamp);
break;
case CONTROL_CENTER_KEY:
- do_execute_desktop_or_desktop (manager, "org.gnome.Settings.desktop", NULL, timestamp);
+ do_execute_desktop_or_desktop (manager, "gnome-control-center.desktop", NULL, timestamp);
break;
case PLAY_KEY:
return do_multimedia_player_action (manager, "Play");
......@@ -11,10 +11,10 @@ Bug-GNOME: https://bugzilla.gnome.org/show_bug.cgi?id=671979
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index a705007..75c9edb 100644
index 15e96e0..688baed 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -1150,6 +1150,12 @@ gnome_session_shutdown (GsdMediaKeysManager *manager)
@@ -1123,6 +1123,12 @@ gnome_session_shutdown (GsdMediaKeysManager *manager)
g_object_unref (proxy);
}
......@@ -27,7 +27,7 @@ index a705007..75c9edb 100644
static void
do_eject_action_cb (GDrive *drive,
GAsyncResult *res,
@@ -2475,7 +2481,7 @@ do_action (GsdMediaKeysManager *manager,
@@ -2381,7 +2387,7 @@ do_action (GsdMediaKeysManager *manager,
SOUND_ACTION_FLAG_IS_OUTPUT | SOUND_ACTION_FLAG_IS_PRECISE);
break;
case LOGOUT_KEY:
......
......@@ -10,12 +10,12 @@ Subject: media-keys: restore terminal keyboard shortcut schema
4 files changed, 32 insertions(+)
diff --git a/data/org.gnome.settings-daemon.plugins.media-keys.gschema.xml.in b/data/org.gnome.settings-daemon.plugins.media-keys.gschema.xml.in
index fb0c85c..5a05d7f 100644
index ef5be62..590d52d 100644
--- a/data/org.gnome.settings-daemon.plugins.media-keys.gschema.xml.in
+++ b/data/org.gnome.settings-daemon.plugins.media-keys.gschema.xml.in
@@ -131,6 +131,11 @@
<summary>Record a short video of the screen</summary>
<description>Binding to record a short video of the screen</description>
@@ -96,6 +96,11 @@
<summary>Microphone mute/unmute</summary>
<description>Binding to mute/unmute the microphone.</description>
</key>
+ <key name="terminal" type="s">
+ <default>'&lt;Primary&gt;&lt;Alt&gt;t'</default>
......@@ -25,9 +25,9 @@ index fb0c85c..5a05d7f 100644
<key name="www" type="s">
<default>'XF86WWW'</default>
<summary>Launch web browser</summary>
@@ -352,6 +357,11 @@
<summary>Record a short video of the screen</summary>
<description>Binding to record a short video of the screen</description>
@@ -282,6 +287,11 @@
<summary>Microphone mute/unmute</summary>
<description>Binding to mute/unmute the microphone.</description>
</key>
+ <key name="terminal" type="as">
+ <default>['&lt;Primary&gt;&lt;Alt&gt;t']</default>
......@@ -38,10 +38,10 @@ index fb0c85c..5a05d7f 100644
<default>['']</default>
<summary>Launch web browser</summary>
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index a38be7a..a705007 100644
index 688baed..4b45532 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -1114,6 +1114,22 @@ gnome_session_shutdown_cb (GObject *source_object,
@@ -1103,6 +1103,22 @@ gnome_session_shutdown_cb (GObject *source_object,
}
}
......@@ -64,9 +64,9 @@ index a38be7a..a705007 100644
static void
gnome_session_shutdown (GsdMediaKeysManager *manager)
{
@@ -2490,6 +2506,9 @@ do_action (GsdMediaKeysManager *manager,
case SCREENCAST_KEY:
do_screencast_action (manager);
@@ -2407,6 +2423,9 @@ do_action (GsdMediaKeysManager *manager,
case HELP_KEY:
do_url_action (manager, "ghelp", timestamp);
break;
+ case TERMINAL_KEY:
+ do_terminal_action (manager);
......@@ -74,34 +74,34 @@ index a38be7a..a705007 100644
case WWW_KEY:
do_url_action (manager, "http", timestamp);
break;
@@ -3100,6 +3119,7 @@ migrate_keybinding_settings (void)
{ "window-screenshot-clip", "window-screenshot-clip", map_keybinding },
{ "area-screenshot-clip", "area-screenshot-clip", map_keybinding },
{ "screencast", "screencast", map_keybinding },
@@ -2981,6 +3000,7 @@ migrate_keybinding_settings (void)
{ "volume-mute", "volume-mute", map_keybinding },
{ "volume-up", "volume-up", map_keybinding },
{ "mic-mute", "mic-mute", map_keybinding },
+ { "terminal", "terminal", map_keybinding },
{ "www", "www", map_keybinding },
{ "magnifier", "magnifier", map_keybinding },
{ "screenreader", "screenreader", map_keybinding },
diff --git a/plugins/media-keys/media-keys.h b/plugins/media-keys/media-keys.h
index cc4ea8e..64362a4 100644
index 801a13b..cef50bd 100644
--- a/plugins/media-keys/media-keys.h
+++ b/plugins/media-keys/media-keys.h
@@ -49,6 +49,7 @@ typedef enum {
WINDOW_SCREENSHOT_CLIP_KEY,
AREA_SCREENSHOT_CLIP_KEY,
SCREENCAST_KEY,
@@ -42,6 +42,7 @@ typedef enum {
CONTROL_CENTER_KEY,
SCREENSAVER_KEY,
HELP_KEY,
+ TERMINAL_KEY,
WWW_KEY,
PLAY_KEY,
PAUSE_KEY,
diff --git a/plugins/media-keys/shortcuts-list.h b/plugins/media-keys/shortcuts-list.h
index 8ced72d..45f0772 100644
index c8f084c..7a70c8c 100644
--- a/plugins/media-keys/shortcuts-list.h
+++ b/plugins/media-keys/shortcuts-list.h
@@ -71,6 +71,7 @@ static struct {
{ WINDOW_SCREENSHOT_CLIP_KEY, "window-screenshot-clip", FALSE, SHELL_ACTION_MODE_NORMAL, META_KEY_BINDING_IGNORE_AUTOREPEAT },
{ AREA_SCREENSHOT_CLIP_KEY, "area-screenshot-clip", FALSE, SHELL_ACTION_MODE_ALL, META_KEY_BINDING_IGNORE_AUTOREPEAT },
{ SCREENCAST_KEY, "screencast", FALSE, NO_LOCK_MODE, META_KEY_BINDING_IGNORE_AUTOREPEAT },
@@ -64,6 +64,7 @@ static struct {
{ CONTROL_CENTER_KEY, "control-center", TRUE, GSD_ACTION_MODE_LAUNCHER, META_KEY_BINDING_IGNORE_AUTOREPEAT },
{ SCREENSAVER_KEY, "screensaver", TRUE, SCREENSAVER_MODE, META_KEY_BINDING_IGNORE_AUTOREPEAT },
{ HELP_KEY, "help", FALSE, GSD_ACTION_MODE_LAUNCHER, META_KEY_BINDING_IGNORE_AUTOREPEAT },
+ { TERMINAL_KEY, "terminal", FALSE, GSD_ACTION_MODE_LAUNCHER, META_KEY_BINDING_IGNORE_AUTOREPEAT },
{ WWW_KEY, "www", TRUE, GSD_ACTION_MODE_LAUNCHER, META_KEY_BINDING_IGNORE_AUTOREPEAT },
{ PLAY_KEY, "play", TRUE, SHELL_ACTION_MODE_ALL, META_KEY_BINDING_IGNORE_AUTOREPEAT },
......
......@@ -7,10 +7,10 @@ Subject: teach gsd about the gnome-calculator snap .desktop name
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index 75c9edb..1ab7d1e 100644
index f4c5755..2b8d80f 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -2522,7 +2522,7 @@ do_action (GsdMediaKeysManager *manager,
@@ -2433,7 +2433,7 @@ do_action (GsdMediaKeysManager *manager,
do_media_action (manager, timestamp);
break;
case CALCULATOR_KEY:
......
project(
'gnome-settings-daemon', 'c',
version: '42.alpha',
version: '42.rc',
license: [ 'GPL2+', 'LGPLv2+' ],
meson_version: '>= 0.49.0'
)
......@@ -96,7 +96,7 @@ gnome_desktop_dep = dependency('gnome-desktop-3.0', version: '>= 3.37.1')
gsettings_desktop_dep = dependency('gsettings-desktop-schemas', version: '>= 42')
gtk_dep = dependency('gtk+-3.0', version: '>= 3.15.3')
gtk_x11_dep = dependency('gtk+-x11-3.0')
gweather_dep = dependency('gweather-3.0', version: '>= 40.alpha')
gweather_dep = dependency('gweather4')
lcms_dep = dependency('lcms2', version: '>= 2.2')
libcanberra_gtk_dep = dependency('libcanberra-gtk3')
libgeoclue_dep = dependency('libgeoclue-2.0', version: '>= 2.3.1')
......
......@@ -22,7 +22,6 @@
#include "weather-tz.h"
#include "tz.h"
#define GWEATHER_I_KNOW_THIS_IS_UNSTABLE
#include <libgweather/gweather.h>
static GList *
......@@ -33,7 +32,7 @@ location_get_cities (GWeatherLocation *parent_location)
while ((child = gweather_location_next_child (parent_location, child))) {
if (gweather_location_get_level (child) == GWEATHER_LOCATION_CITY) {
cities = g_list_prepend (cities, gweather_location_ref (child));
cities = g_list_prepend (cities, g_object_ref (child));
} else {
cities = g_list_concat (cities,
location_get_cities (child));
......@@ -65,6 +64,7 @@ load_timezones (GList *cities)
TzLocation *loc;
const gchar *country;
const gchar *timezone_id;
GTimeZone *tz;
gdouble latitude;
gdouble longitude;
......@@ -77,7 +77,8 @@ load_timezones (GList *cities)
}
country = gweather_location_get_country (l->data);
timezone_id = gweather_timezone_get_tzid (gweather_location_get_timezone (l->data));
tz = gweather_location_get_timezone (l->data);
timezone_id = g_time_zone_get_identifier (tz);
gweather_location_get_coords (l->data,
&latitude,
&longitude);
......
......@@ -57,10 +57,6 @@
#define GNOME_DESKTOP_INTERFACE_DIR "org.gnome.desktop.interface"
#define KEY_GTK_IM_MODULE "gtk-im-module"
#define GTK_IM_MODULE_SIMPLE "gtk-im-context-simple"
#define GTK_IM_MODULE_IBUS "ibus"
#define GNOME_DESKTOP_INPUT_SOURCES_DIR "org.gnome.desktop.input-sources"
#define KEY_INPUT_SOURCES "sources"
......@@ -71,9 +67,6 @@
#define DEFAULT_LAYOUT "us"
#define GNOME_A11Y_APPLICATIONS_INTERFACE_DIR "org.gnome.desktop.a11y.applications"
#define KEY_OSK_ENABLED "screen-keyboard-enabled"
struct _GsdKeyboardManager
{
GObject parent;
......@@ -81,21 +74,14 @@ struct _GsdKeyboardManager
guint start_idle_id;
GSettings *settings;
GSettings *input_sources_settings;
GSettings *a11y_settings;
GDBusProxy *localed;
GCancellable *cancellable;
GdkSeat *user_seat;
guint device_added_id;
guint device_removed_id;
};
static void gsd_keyboard_manager_class_init (GsdKeyboardManagerClass *klass);
static void gsd_keyboard_manager_init (GsdKeyboardManager *keyboard_manager);
static void gsd_keyboard_manager_finalize (GObject *object);
static void update_gtk_im_module (GsdKeyboardManager *manager);
G_DEFINE_TYPE (GsdKeyboardManager, gsd_keyboard_manager, G_TYPE_OBJECT)
static gpointer manager_object = NULL;
......@@ -218,121 +204,6 @@ settings_changed (GSettings *settings,
}
static void
device_added_cb (GdkSeat *user_seat,
GdkDevice *device,
GsdKeyboardManager *manager)
{
GdkInputSource source;
source = gdk_device_get_source (device);
if (source == GDK_SOURCE_TOUCHSCREEN) {
update_gtk_im_module (manager);
}
}
static void
device_removed_cb (GdkSeat *user_seat,
GdkDevice *device,
GsdKeyboardManager *manager)
{
GdkInputSource source;
source = gdk_device_get_source (device);
if (source == GDK_SOURCE_TOUCHSCREEN)
update_gtk_im_module (manager);
}
static void
set_devicepresence_handler (GsdKeyboardManager *manager)
{
GdkSeat *user_seat;
if (gnome_settings_is_wayland ())
return;
user_seat = gdk_display_get_default_seat (gdk_display_get_default ());
manager->device_added_id = g_signal_connect (G_OBJECT (user_seat), "device-added",
G_CALLBACK (device_added_cb), manager);
manager->device_removed_id = g_signal_connect (G_OBJECT (user_seat), "device-removed",
G_CALLBACK (device_removed_cb), manager);
manager->user_seat = user_seat;
}
static gboolean
need_ibus (GVariant *sources)
{
GVariantIter iter;
const gchar *type;
g_variant_iter_init (&iter, sources);
while (g_variant_iter_next (&iter, "(&s&s)", &type, NULL))
if (g_str_equal (type, INPUT_SOURCE_TYPE_IBUS))
return TRUE;
return FALSE;
}
static gboolean
need_osk (GsdKeyboardManager *manager)
{
gboolean has_touchscreen = FALSE;
GList *devices;
GdkSeat *seat;
if (g_settings_get_boolean (manager->a11y_settings,
KEY_OSK_ENABLED))
return TRUE;
seat = gdk_display_get_default_seat (gdk_display_get_default ());
devices = gdk_seat_get_slaves (seat, GDK_SEAT_CAPABILITY_TOUCH);
has_touchscreen = devices != NULL;
g_list_free (devices);
return has_touchscreen;
}
static void
set_gtk_im_module (GsdKeyboardManager *manager,
GSettings *settings,
GVariant *sources)
{
const gchar *new_module;
gchar *current_module;
if (need_ibus (sources) || need_osk (manager))
new_module = GTK_IM_MODULE_IBUS;
else
new_module = GTK_IM_MODULE_SIMPLE;
current_module = g_settings_get_string (settings, KEY_GTK_IM_MODULE);
if (!g_str_equal (current_module, new_module))
g_settings_set_string (settings, KEY_GTK_IM_MODULE, new_module);
g_free (current_module);
}
static void
update_gtk_im_module (GsdKeyboardManager *manager)
{
GSettings *interface_settings;
GVariant *sources;
/* Gtk+ uses the IM module advertised in XSETTINGS so, if we
* have IBus input sources, we want it to load that
* module. Otherwise we can use the default "simple" module
* which is builtin gtk+
*/
interface_settings = g_settings_new (GNOME_DESKTOP_INTERFACE_DIR);
sources = g_settings_get_value (manager->input_sources_settings,
KEY_INPUT_SOURCES);
set_gtk_im_module (manager, interface_settings, sources);
g_object_unref (interface_settings);
g_variant_unref (sources);
}
static void
get_sources_from_xkb_config (GsdKeyboardManager *manager)
{
......@@ -580,18 +451,7 @@ start_keyboard_idle_cb (GsdKeyboardManager *manager)
manager->settings = g_settings_new (GSD_KEYBOARD_DIR);
set_devicepresence_handler (manager);
manager->input_sources_settings = g_settings_new (GNOME_DESKTOP_INPUT_SOURCES_DIR);
g_signal_connect_swapped (manager->input_sources_settings,
"changed::" KEY_INPUT_SOURCES,
G_CALLBACK (update_gtk_im_module), manager);
manager->a11y_settings = g_settings_new (GNOME_A11Y_APPLICATIONS_INTERFACE_DIR);
g_signal_connect_swapped (manager->a11y_settings,
"changed::" KEY_OSK_ENABLED,
G_CALLBACK (update_gtk_im_module), manager);
update_gtk_im_module (manager);
manager->cancellable = g_cancellable_new ();
......@@ -645,14 +505,7 @@ gsd_keyboard_manager_stop (GsdKeyboardManager *manager)
g_clear_object (&manager->settings);
g_clear_object (&manager->input_sources_settings);
g_clear_object (&manager->a11y_settings);
g_clear_object (&manager->localed);
if (manager->user_seat != NULL) {
g_signal_handler_disconnect (manager->user_seat, manager->device_added_id);
g_signal_handler_disconnect (manager->user_seat, manager->device_removed_id);
manager->user_seat = NULL;
}
}
static void
......
......@@ -58,7 +58,6 @@
#include "shortcuts-list.h"
#include "shell-key-grabber.h"
#include "gsd-screenshot-utils.h"
#include "gsd-input-helper.h"
#include "gsd-enums.h"
#include "gsd-shell-helper.h"
......@@ -199,12 +198,6 @@ typedef struct
/* ScreenSaver stuff */
GsdScreenSaver *screen_saver_proxy;
/* Screencast stuff */
GDBusProxy *screencast_proxy;
guint screencast_timeout_id;
gboolean screencast_recording;
GCancellable *screencast_cancellable;
/* Rotation */
guint iio_sensor_watch_id;
gboolean has_accel;
......@@ -747,10 +740,6 @@ gsettings_changed_cb (GSettings *settings,
if (g_str_equal (settings_key, "custom-keybindings"))
return;
/* not needed here */
if (g_str_equal (settings_key, "max-screencast-length"))
return;
/* Find the key that was modified */
if (priv->keys == NULL)
return;
......@@ -1397,6 +1386,8 @@ show_volume_osd (GsdMediaKeysManager *manager,
port = gvc_mixer_stream_get_port (stream);
if (g_strcmp0 (gvc_mixer_stream_get_form_factor (stream), "internal") != 0 ||
(port != NULL &&
g_strcmp0 (port->port, "[OUT] Speaker") != 0 &&
g_strcmp0 (port->port, "[OUT] Handset") != 0 &&
g_strcmp0 (port->port, "analog-output-speaker") != 0 &&
g_strcmp0 (port->port, "analog-output") != 0)) {
device = gvc_mixer_control_lookup_device_from_stream (priv->volume, stream);
......@@ -2329,75 +2320,6 @@ do_rfkill_action (GsdMediaKeysManager *manager,
data->property, new_state ? "true" : "false");
}
static void
screencast_stop (GsdMediaKeysManager *manager)
{
GsdMediaKeysManagerPrivate *priv = GSD_MEDIA_KEYS_MANAGER_GET_PRIVATE (manager);
if (priv->screencast_timeout_id > 0) {
g_source_remove (priv->screencast_timeout_id);
priv->screencast_timeout_id = 0;
}
g_dbus_proxy_call (priv->screencast_proxy,
"StopScreencast", NULL,
G_DBUS_CALL_FLAGS_NONE, -1,
priv->screencast_cancellable,
NULL, NULL);
priv->screencast_recording = FALSE;
}
static gboolean
screencast_timeout (gpointer user_data)
{
GsdMediaKeysManager *manager = user_data;
screencast_stop (manager);
return G_SOURCE_REMOVE;
}
static void
screencast_start (GsdMediaKeysManager *manager)
{
GsdMediaKeysManagerPrivate *priv = GSD_MEDIA_KEYS_MANAGER_GET_PRIVATE (manager);
guint max_length;
g_dbus_proxy_call (priv->screencast_proxy,
"Screencast",
g_variant_new_parsed ("(%s, @a{sv} {})",
/* Translators: this is a filename used for screencast
* recording, where "%d" and "%t" date and time, e.g.
* "Screencast from 07-17-2013 10:00:46 PM.webm" */
/* xgettext:no-c-format */
_("Screencast from %d %t.webm")),
G_DBUS_CALL_FLAGS_NONE, -1,
priv->screencast_cancellable,
NULL, NULL);
max_length = g_settings_get_uint (priv->settings, "max-screencast-length");
if (max_length > 0) {
priv->screencast_timeout_id = g_timeout_add_seconds (max_length,
screencast_timeout,
manager);
g_source_set_name_by_id (priv->screencast_timeout_id, "[gnome-settings-daemon] screencast_timeout");
}
priv->screencast_recording = TRUE;
}
static void
do_screencast_action (GsdMediaKeysManager *manager)
{
GsdMediaKeysManagerPrivate *priv = GSD_MEDIA_KEYS_MANAGER_GET_PRIVATE (manager);
if (priv->screencast_proxy == NULL)
return;
if (!priv->screencast_recording)
screencast_start (manager);
else
screencast_stop (manager);
}
static void
do_custom_action (GsdMediaKeysManager *manager,
const gchar *device_node,
......@@ -2479,17 +2401,6 @@ do_action (GsdMediaKeysManager *manager,
case HELP_KEY:
do_url_action (manager, "ghelp", timestamp);
break;
case SCREENSHOT_KEY:
case SCREENSHOT_CLIP_KEY:
case WINDOW_SCREENSHOT_KEY:
case WINDOW_SCREENSHOT_CLIP_KEY:
case AREA_SCREENSHOT_KEY:
case AREA_SCREENSHOT_CLIP_KEY:
gsd_screenshot_take (type);
break;
case SCREENCAST_KEY:
do_screencast_action (manager);
break;
case WWW_KEY:
do_url_action (manager, "http", timestamp);
break;
......@@ -2500,7 +2411,7 @@ do_action (GsdMediaKeysManager *manager,
do_execute_desktop_or_desktop (manager, "org.gnome.Calculator.desktop", "gnome-calculator.desktop", timestamp);
break;
case CONTROL_CENTER_KEY:
do_execute_desktop_or_desktop (manager, "gnome-control-center.desktop", NULL, timestamp);
do_execute_desktop_or_desktop (manager, "org.gnome.Settings.desktop", NULL, timestamp);
break;
case PLAY_KEY:
return do_multimedia_player_action (manager, "Play");
......@@ -2843,25 +2754,6 @@ initialize_volume_handler (GsdMediaKeysManager *manager)
gnome_settings_profile_end ("gvc_mixer_control_new");
}
static void
on_screencast_proxy_ready (GObject *source,
GAsyncResult *result,
gpointer data)
{
GsdMediaKeysManager *manager = data;
GsdMediaKeysManagerPrivate *priv = GSD_MEDIA_KEYS_MANAGER_GET_PRIVATE (manager);
GError *error = NULL;
priv->screencast_proxy =
g_dbus_proxy_new_for_bus_finish (result, &error);
if (!priv->screencast_proxy) {
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
g_warning ("Failed to create proxy for screencast: %s", error->message);
g_error_free (error);
}
}
static void
on_key_grabber_ready (GObject *source,
GAsyncResult *result,
......@@ -2899,7 +2791,6 @@ shell_presence_changed (GsdMediaKeysManager *manager)
g_ptr_array_set_size (priv->keys, 0);
g_clear_object (&priv->key_grabber);
g_clear_object (&priv->screencast_proxy);
if (name_owner) {
shell_key_grabber_proxy_new_for_bus (G_BUS_TYPE_SESSION,
......@@ -2990,7 +2881,6 @@ start_media_keys_idle_cb (GsdMediaKeysManager *manager)
priv->icon_theme = g_settings_get_string (priv->interface_settings, "icon-theme");
priv->grab_cancellable = g_cancellable_new ();
priv->screencast_cancellable = g_cancellable_new ();
priv->rfkill_cancellable = g_cancellable_new ();
priv->shell_proxy = gnome_settings_bus_get_shell_proxy ();
......@@ -2998,14 +2888,6 @@ start_media_keys_idle_cb (GsdMediaKeysManager *manager)
G_CALLBACK (shell_presence_changed), manager);
shell_presence_changed (manager);
g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
0, NULL,
SHELL_DBUS_NAME ".Screencast",
SHELL_DBUS_PATH "/Screencast",
SHELL_DBUS_NAME ".Screencast",
priv->screencast_cancellable,
on_screencast_proxy_ready, manager);
priv->rfkill_watch_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
"org.gnome.SettingsDaemon.Rfkill",
G_BUS_NAME_WATCHER_FLAGS_NONE,
......@@ -3093,13 +2975,6 @@ migrate_keybinding_settings (void)
{ "volume-mute", "volume-mute", map_keybinding },
{ "volume-up", "volume-up", map_keybinding },
{ "mic-mute", "mic-mute", map_keybinding },
{ "screenshot", "screenshot", map_keybinding },
{ "window-screenshot", "window-screenshot", map_keybinding },
{ "area-screenshot", "area-screenshot", map_keybinding },
{ "screenshot-clip", "screenshot-clip", map_keybinding },
{ "window-screenshot-clip", "window-screenshot-clip", map_keybinding },
{ "area-screenshot-clip", "area-screenshot-clip", map_keybinding },
{ "screencast", "screencast", map_keybinding },
{ "www", "www", map_keybinding },
{ "magnifier", "magnifier", map_keybinding },
{ "screenreader", "screenreader", map_keybinding },
......@@ -3204,7 +3079,6 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
g_clear_object (&priv->power_keyboard_proxy);
g_clear_object (&priv->composite_device);
g_clear_object (&priv->mpris_controller);
g_clear_object (&priv->screencast_proxy);
g_clear_object (&priv->iio_sensor_proxy);
g_clear_pointer (&priv->chassis_type, g_free);
g_clear_object (&priv->connection);
......@@ -3245,11 +3119,6 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
g_clear_object (&priv->grab_cancellable);
}
if (priv->screencast_cancellable != NULL) {
g_cancellable_cancel (priv->screencast_cancellable);
g_clear_object (&priv->screencast_cancellable);
}
if (priv->rfkill_cancellable != NULL) {
g_cancellable_cancel (priv->rfkill_cancellable);
g_clear_object (&priv->rfkill_cancellable);
......
/* gsd-screenshot-utils.c - utilities to take screenshots
*
* Copyright (C) 2012 Red Hat, Inc.
*
* Adapted from gnome-screenshot code, which is
* Copyright (C) 2001-2006 Jonathan Blandford <jrb@alum.mit.edu>
* Copyright (C) 2006 Emmanuele Bassi <ebassi@gnome.org>
* Copyright (C) 2008-2012 Cosimo Cecchi <cosimoc@gnome.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
*/
#include <config.h>
#include <gtk/gtk.h>
#include <gio/gio.h>
#include <glib/gi18n.h>
#include <string.h>
#include <glib/gstdio.h>
#include "gsd-screenshot-utils.h"
#define SHELL_SCREENSHOT_BUS_NAME "org.gnome.Shell"
#define SHELL_SCREENSHOT_BUS_PATH "/org/gnome/Shell/Screenshot"
#define SHELL_SCREENSHOT_BUS_IFACE "org.gnome.Shell.Screenshot"
typedef enum {
SCREENSHOT_TYPE_SCREEN,
SCREENSHOT_TYPE_WINDOW,
SCREENSHOT_TYPE_AREA
} ScreenshotType;
typedef struct {
ScreenshotType type;
gboolean copy_to_clipboard;
GdkRectangle area_selection;
gchar *save_filename;
gchar *used_filename;
GDBusConnection *connection;
} ScreenshotContext;
static void
screenshot_context_free (ScreenshotContext *ctx)
{
g_free (ctx->save_filename);
g_free (ctx->used_filename);
g_clear_object (&ctx->connection);
g_slice_free (ScreenshotContext, ctx);
}
static void
screenshot_save_to_recent (ScreenshotContext *ctx)
{
GFile *file = g_file_new_for_path (ctx->used_filename);
gchar *uri = g_file_get_uri (file);
gtk_recent_manager_add_item (gtk_recent_manager_get_default (), uri);
g_free (uri);
g_object_unref (file);
}
static void
bus_call_ready_cb (GObject *source,
GAsyncResult *res,
gpointer user_data)
{
GError *error = NULL;
ScreenshotContext *ctx = user_data;
GVariant *variant;
gboolean success;
variant = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source), res, &error);
if (error != NULL)
{
g_warning ("Failed to save a screenshot: %s\n", error->message);
g_error_free (error);
screenshot_context_free (ctx);
return;
}
g_variant_get (variant, "(bs)", &success, &ctx->used_filename);
if (success)
{
if (!ctx->copy_to_clipboard)
{
screenshot_save_to_recent (ctx);
}
}
screenshot_context_free (ctx);
g_variant_unref (variant);
}
static void
screenshot_call_shell (ScreenshotContext *ctx)
{
const gchar *method_name;
GVariant *method_params;
if (ctx->type == SCREENSHOT_TYPE_SCREEN)
{
method_name = "Screenshot";
method_params = g_variant_new ("(bbs)",
FALSE, /* include pointer */
TRUE, /* flash */
ctx->save_filename);
}
else if (ctx->type == SCREENSHOT_TYPE_WINDOW)
{
method_name = "ScreenshotWindow";
method_params = g_variant_new ("(bbbs)",
TRUE, /* include border */
FALSE, /* include pointer */
TRUE, /* flash */
ctx->save_filename);
}
else
{
method_name = "ScreenshotArea";
method_params = g_variant_new ("(iiiibs)",
ctx->area_selection.x, ctx->area_selection.y,
ctx->area_selection.width, ctx->area_selection.height,
TRUE, /* flash */
ctx->save_filename);
}
g_dbus_connection_call (ctx->connection,
SHELL_SCREENSHOT_BUS_NAME,
SHELL_SCREENSHOT_BUS_PATH,
SHELL_SCREENSHOT_BUS_IFACE,
method_name,
method_params,
NULL,
G_DBUS_CALL_FLAGS_NO_AUTO_START,
-1,
NULL,
bus_call_ready_cb,
ctx);
}
static void
area_selection_ready_cb (GObject *source,
GAsyncResult *res,
gpointer user_data)
{
GdkRectangle rectangle;
ScreenshotContext *ctx = user_data;
GVariant *geometry;
geometry = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source),
res, NULL);
/* cancelled by the user */
if (!geometry)
{
screenshot_context_free (ctx);
return;
}
g_variant_get (geometry, "(iiii)",
&rectangle.x, &rectangle.y,
&rectangle.width, &rectangle.height);
ctx->area_selection = rectangle;
screenshot_call_shell (ctx);
g_variant_unref (geometry);
}
static void
bus_connection_ready_cb (GObject *source,
GAsyncResult *res,
gpointer user_data)
{
GError *error = NULL;
ScreenshotContext *ctx = user_data;
ctx->connection = g_bus_get_finish (res, &error);
if (error != NULL)
{
g_warning ("Failed to save a screenshot: %s\n", error->message);
g_error_free (error);
screenshot_context_free (ctx);
return;
}
if (ctx->type == SCREENSHOT_TYPE_AREA)
g_dbus_connection_call (ctx->connection,
SHELL_SCREENSHOT_BUS_NAME,
SHELL_SCREENSHOT_BUS_PATH,
SHELL_SCREENSHOT_BUS_IFACE,
"SelectArea",
NULL,
NULL,
G_DBUS_CALL_FLAGS_NO_AUTO_START,
-1,
NULL,
area_selection_ready_cb,
ctx);
else
screenshot_call_shell (ctx);
}
static void
screenshot_take (ScreenshotContext *ctx)
{
g_bus_get (G_BUS_TYPE_SESSION, NULL, bus_connection_ready_cb, ctx);
}
static gchar *
screenshot_build_filename (void)
{
char *file_name, *origin;
GDateTime *d;
d = g_date_time_new_now_local ();
origin = g_date_time_format (d, "%Y-%m-%d %H-%M-%S");
g_date_time_unref (d);
/* translators: this is the name of the file that gets made up
* with the screenshot */
file_name = g_strdup_printf (_("Screenshot from %s"), origin);
g_free (origin);
return file_name;
}
static void
screenshot_check_name_ready (ScreenshotContext *ctx)
{
if (ctx->copy_to_clipboard)
ctx->save_filename = g_strdup ("");
else
ctx->save_filename = screenshot_build_filename ();
screenshot_take (ctx);
}
void
gsd_screenshot_take (MediaKeyType key_type)
{
ScreenshotContext *ctx = g_slice_new0 (ScreenshotContext);
ctx->copy_to_clipboard = (key_type == SCREENSHOT_CLIP_KEY ||
key_type == WINDOW_SCREENSHOT_CLIP_KEY ||
key_type == AREA_SCREENSHOT_CLIP_KEY);
switch (key_type)
{
case SCREENSHOT_KEY:
case SCREENSHOT_CLIP_KEY:
ctx->type = SCREENSHOT_TYPE_SCREEN;
break;
case WINDOW_SCREENSHOT_KEY:
case WINDOW_SCREENSHOT_CLIP_KEY:
ctx->type = SCREENSHOT_TYPE_WINDOW;
break;
case AREA_SCREENSHOT_KEY:
case AREA_SCREENSHOT_CLIP_KEY:
ctx->type = SCREENSHOT_TYPE_AREA;
break;
default:
g_assert_not_reached ();
break;
}
screenshot_check_name_ready (ctx);
}
/* gsd-screenshot-utils.h - utilities to take screenshots
*
* Copyright (C) 2012 Red Hat, Inc.
*
* Adapted from gnome-screenshot code, which is
* Copyright (C) 2001-2006 Jonathan Blandford <jrb@alum.mit.edu>
* Copyright (C) 2006 Emmanuele Bassi <ebassi@gnome.org>
* Copyright (C) 2008-2012 Cosimo Cecchi <cosimoc@gnome.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
*/
#ifndef __GSD_SCREENSHOT_UTILS_H__
#define __GSD_SCREENSHOT_UTILS_H__
#include "media-keys.h"
G_BEGIN_DECLS
void gsd_screenshot_take (MediaKeyType key_type);
G_END_DECLS
#endif /* __GSD_SCREENSHOT_UTILS_H__ */