[arch-commits] Commit in gcolor3/repos/community-x86_64 (4 files)
Allan McRae
allan at gemini.archlinux.org
Sun Apr 24 12:51:27 UTC 2022
Date: Sunday, April 24, 2022 @ 12:51:27
Author: allan
Revision: 1189574
archrelease: copy trunk to community-x86_64
Added:
gcolor3/repos/community-x86_64/PKGBUILD
(from rev 1189573, gcolor3/trunk/PKGBUILD)
gcolor3/repos/community-x86_64/portal.patch
(from rev 1189573, gcolor3/trunk/portal.patch)
Deleted:
gcolor3/repos/community-x86_64/PKGBUILD
gcolor3/repos/community-x86_64/portal.patch
--------------+
PKGBUILD | 70 +--
portal.patch | 1052 ++++++++++++++++++++++++++++-----------------------------
2 files changed, 561 insertions(+), 561 deletions(-)
Deleted: PKGBUILD
===================================================================
--- PKGBUILD 2022-04-24 12:51:04 UTC (rev 1189573)
+++ PKGBUILD 2022-04-24 12:51:27 UTC (rev 1189574)
@@ -1,35 +0,0 @@
-# Maintainer: Balló György <ballogyor+arch at gmail dot com>
-
-pkgname=gcolor3
-pkgver=2.4.0
-pkgrel=3
-pkgdesc='Simple color chooser written in GTK'
-arch=('x86_64')
-url='https://www.hjdskes.nl/projects/gcolor3/'
-license=('GPL2')
-depends=('gtk3')
-makedepends=('appstream-glib' 'meson')
-source=("https://gitlab.gnome.org/World/$pkgname/-/archive/v$pkgver/$pkgname-v$pkgver.tar.gz"
- 'portal.patch')
-sha256sums=('d6071390a0980fb8eb8418750766c744cf0bca56f24ab4dbe3f23cb1ffd1973d'
- '8dcb21d421eef8d0bc95c62fee860a82fe5d8ae90a5c8d93b8e62444bf9c1152')
-
-prepare() {
- cd $pkgname-v$pkgver
- # Revert Wayland support, keep Xorg supported for now
- # https://gitlab.gnome.org/World/gcolor3/-/issues/124
- patch -RNp1 -i ../portal.patch
-}
-
-build() {
- arch-meson $pkgname-v$pkgver build
- meson compile -C build
-}
-
-check() {
- meson test -C build
-}
-
-package() {
- DESTDIR="$pkgdir" meson install -C build
-}
Copied: gcolor3/repos/community-x86_64/PKGBUILD (from rev 1189573, gcolor3/trunk/PKGBUILD)
===================================================================
--- PKGBUILD (rev 0)
+++ PKGBUILD 2022-04-24 12:51:27 UTC (rev 1189574)
@@ -0,0 +1,35 @@
+# Maintainer: Balló György <ballogyor+arch at gmail dot com>
+
+pkgname=gcolor3
+pkgver=2.4.0
+pkgrel=4
+pkgdesc='Simple color chooser written in GTK'
+arch=('x86_64')
+url='https://www.hjdskes.nl/projects/gcolor3/'
+license=('GPL2')
+depends=('gtk3')
+makedepends=('appstream-glib' 'meson')
+source=("https://gitlab.gnome.org/World/$pkgname/-/archive/v$pkgver/$pkgname-v$pkgver.tar.gz"
+ 'portal.patch')
+sha256sums=('d6071390a0980fb8eb8418750766c744cf0bca56f24ab4dbe3f23cb1ffd1973d'
+ '8dcb21d421eef8d0bc95c62fee860a82fe5d8ae90a5c8d93b8e62444bf9c1152')
+
+prepare() {
+ cd $pkgname-v$pkgver
+ # Revert Wayland support, keep Xorg supported for now
+ # https://gitlab.gnome.org/World/gcolor3/-/issues/124
+ patch -RNp1 -i ../portal.patch
+}
+
+build() {
+ arch-meson $pkgname-v$pkgver build
+ meson compile -C build
+}
+
+check() {
+ meson test -C build
+}
+
+package() {
+ DESTDIR="$pkgdir" meson install -C build
+}
Deleted: portal.patch
===================================================================
--- portal.patch 2022-04-24 12:51:04 UTC (rev 1189573)
+++ portal.patch 2022-04-24 12:51:27 UTC (rev 1189574)
@@ -1,526 +0,0 @@
-From d0cc2acd9dd67e51500b5ce96519ed21d2fc4776 Mon Sep 17 00:00:00 2001
-From: Christopher Davis <brainblasted at disroot.org>
-Date: Tue, 25 Aug 2020 18:03:29 -0700
-Subject: [PATCH] build: Add libportal as a subproject
-
-Should make Color Picker simpler to build on distros
-that don't yet ship libportal.
----
- .gitignore | 1 +
- meson.build | 11 ++++++-----
- subprojects/libportal.wrap | 4 ++++
- 3 files changed, 11 insertions(+), 5 deletions(-)
- create mode 100644 subprojects/libportal.wrap
-
-diff --git a/.gitignore b/.gitignore
-index 797d03e..697ee9e 100644
---- a/.gitignore
-+++ b/.gitignore
-@@ -6,3 +6,4 @@ build/
- *.lo
- *.o
- *.gresource
-+/subprojects/libportal/
-diff --git a/meson.build b/meson.build
-index 5ffa858..195de61 100644
---- a/meson.build
-+++ b/meson.build
-@@ -1,14 +1,15 @@
- project('gcolor3', 'c', version: '2.3.1',
- license: 'GPL2+',
- meson_version: '>= 0.40.0',
-- default_options: [
-- 'c_std=c99',
-- 'werror=true'
-- ]
- )
-
- dep_gtk = dependency('gtk+-3.0', version: '>= 3.20.0', required: true)
--dep_libportal = dependency('libportal', required: true)
-+dep_libportal = dependency(
-+ 'libportal',
-+ required: true,
-+ fallback: ['libportal', 'libportal_dep'],
-+ default_options: ['gtk_doc=false'],
-+)
- cc = meson.get_compiler('c')
- dep_lm = cc.find_library('m', required: true)
-
-diff --git a/subprojects/libportal.wrap b/subprojects/libportal.wrap
-new file mode 100644
-index 0000000..0ee4948
---- /dev/null
-+++ b/subprojects/libportal.wrap
-@@ -0,0 +1,4 @@
-+[wrap-git]
-+directory=libportal
-+url=https://github.com/flatpak/libportal.git
-+revision=origin/master
-From f68055ce3f91001503a31753b03836b6cf86b3dd Mon Sep 17 00:00:00 2001
-From: Christopher Davis <brainblasted at disroot.org>
-Date: Thu, 14 Nov 2019 16:09:21 -0800
-Subject: [PATCH] color-selection: Use libportal for Wayland suport
-
-Greatly simplify our color selection code by
-using libportal instead of implementing it manually.
-
-Fixes https://gitlab.gnome.org/World/gcolor3/issues/38
----
- meson.build | 1 +
- nl.hjdskes.gcolor3.json | 10 ++
- src/gcolor3-color-selection.c | 275 +++++++---------------------------
- src/meson.build | 1 +
- 4 files changed, 66 insertions(+), 221 deletions(-)
-
-diff --git a/meson.build b/meson.build
-index e5d737b..5ffa858 100644
---- a/meson.build
-+++ b/meson.build
-@@ -8,6 +8,7 @@ project('gcolor3', 'c', version: '2.3.1',
- )
-
- dep_gtk = dependency('gtk+-3.0', version: '>= 3.20.0', required: true)
-+dep_libportal = dependency('libportal', required: true)
- cc = meson.get_compiler('c')
- dep_lm = cc.find_library('m', required: true)
-
-diff --git a/nl.hjdskes.gcolor3.json b/nl.hjdskes.gcolor3.json
-index 04d495a..8ad4423 100644
---- a/nl.hjdskes.gcolor3.json
-+++ b/nl.hjdskes.gcolor3.json
-@@ -17,6 +17,16 @@
- "/share/man"
- ],
- "modules": [
-+ {
-+ "name": "libportal",
-+ "buildsystem": "meson",
-+ "sources": [
-+ {
-+ "type": "git",
-+ "url": "https://github.com/flatpak/libportal.git"
-+ }
-+ ]
-+ },
- {
- "name": "gcolor3",
- "buildsystem": "meson",
-diff --git a/src/gcolor3-color-selection.c b/src/gcolor3-color-selection.c
-index 58503d7..6eccf43 100644
---- a/src/gcolor3-color-selection.c
-+++ b/src/gcolor3-color-selection.c
-@@ -37,11 +37,11 @@
- #include <math.h>
- #include <string.h>
- #include <gdk/gdk.h>
--#ifdef GDK_WINDOWING_WAYLAND
--#include <gdk/gdkwayland.h>
--#endif
-+#include <gio/gio.h>
- #include <gtk/gtk.h>
- #include <glib/gi18n.h>
-+#include <libportal/portal.h>
-+#include <libportal/portal-gtk3.h>
-
- #ifdef ENABLE_NLS
- #define P_(String) g_dgettext(GETTEXT_PACKAGE "-properties",String)
-@@ -153,11 +153,7 @@ struct _Gcolor3ColorSelectionPrivate
- GtkWidget *cur_sample;
- GtkWidget *colorsel;
-
-- /* Window for grabbing on */
-- GtkWidget *dropper_grab_widget;
-- guint32 grab_time;
-- GdkDevice *keyboard_device;
-- GdkDevice *pointer_device;
-+ GCancellable *cancellable;
-
- /* Connection to settings */
- gulong settings_connection;
-@@ -179,8 +175,6 @@ static void gcolor3_color_selection_get_property (GObject *ob
- static void gcolor3_color_selection_realize (GtkWidget *widget);
- static void gcolor3_color_selection_unrealize (GtkWidget *widget);
- static void gcolor3_color_selection_show_all (GtkWidget *widget);
--static gboolean gcolor3_color_selection_grab_broken (GtkWidget *widget,
-- GdkEventGrabBroken *event);
-
- static void gcolor3_color_selection_set_palette_color (Gcolor3ColorSelection *colorsel,
- gint index,
-@@ -201,6 +195,9 @@ static void make_all_relations (AtkObject
- static void hsv_changed (GtkWidget *hsv,
- gpointer data);
- static void get_screen_color (GtkWidget *button);
-+static void pick_color_cb (GObject *source_object,
-+ GAsyncResult *result,
-+ gpointer user_data);
- static void adjustment_changed (GtkAdjustment *adjustment,
- gpointer data);
- static void opacity_entry_changed (GtkWidget *opacity_entry,
-@@ -236,56 +233,12 @@ static void palette_change_notify_instance (GObject *object,
- GParamSpec *pspec,
- gpointer data);
- static void update_palette (Gcolor3ColorSelection *colorsel);
--static void shutdown_eyedropper (GtkWidget *widget);
-
- static guint color_selection_signals[LAST_SIGNAL] = { 0 };
-
- static Gcolor3ColorSelectionChangePaletteFunc noscreen_change_palette_hook = default_noscreen_change_palette_func;
- static Gcolor3ColorSelectionChangePaletteWithScreenFunc change_palette_hook = default_change_palette_func;
-
--static const guchar dropper_bits[] = {
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
-- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377"
-- "\0\0\0\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
-- "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\377\377\377\377"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
-- "\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0\377\0\0"
-- "\0\377\0\0\0\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\0\0\0\377\0"
-- "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\377\377\377"
-- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\377\377\377\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
-- "\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\377\0\0"
-- "\0\377\0\0\0\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
-- "\377\377\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0\377\377\377"
-- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377"
-- "\0\0\0\377\377\377\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
-- "\377\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0\0\0\0\0\0\377\377"
-- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0"
-- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
-- "\377\377\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
-- "\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\0\0"
-- "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0"
-- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
--
- G_DEFINE_TYPE_WITH_PRIVATE (Gcolor3ColorSelection, gcolor3_color_selection, GTK_TYPE_BOX)
-
- static void
-@@ -304,7 +257,6 @@ gcolor3_color_selection_class_init (Gcolor3ColorSelectionClass *klass)
- widget_class->realize = gcolor3_color_selection_realize;
- widget_class->unrealize = gcolor3_color_selection_unrealize;
- widget_class->show_all = gcolor3_color_selection_show_all;
-- widget_class->grab_broken_event = gcolor3_color_selection_grab_broken;
-
- g_object_class_install_property (gobject_class,
- PROP_HAS_OPACITY_CONTROL,
-@@ -393,6 +345,7 @@ gcolor3_color_selection_init (Gcolor3ColorSelection *colorsel)
- priv->changing = FALSE;
- priv->default_set = FALSE;
- priv->default_alpha_set = FALSE;
-+ priv->cancellable = g_cancellable_new ();
-
- top_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
- gtk_box_pack_start (GTK_BOX (colorsel), top_hbox, FALSE, FALSE, 0);
-@@ -430,25 +383,9 @@ gcolor3_color_selection_init (Gcolor3ColorSelection *colorsel)
- gtk_widget_show (GTK_WIDGET (picker_image));
- gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
-
--#ifdef GDK_WINDOWING_WAYLAND
-- if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default()))
-- {
-- gtk_widget_set_sensitive (button, FALSE);
-- gtk_widget_set_tooltip_text (button,
-- _("Picking a color is currently not supported on "
-- "Wayland."));
-- }
--#else
-- if (FALSE)
-- {
-- }
--#endif
-- else
-- {
-- gtk_widget_set_tooltip_text (button,
-- _("Click the eyedropper, then click a color "
-- "anywhere on your screen to select that color."));
-- }
-+ gtk_widget_set_tooltip_text (button,
-+ _("Click the eyedropper, then click a color "
-+ "anywhere on your screen to select that color."));
-
- top_right_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_box_pack_start (GTK_BOX (top_hbox), top_right_vbox, FALSE, FALSE, 0);
-@@ -656,14 +593,10 @@ gcolor3_color_selection_get_property (GObject *object,
- static void
- gcolor3_color_selection_destroy (GtkWidget *widget)
- {
-- Gcolor3ColorSelection *cselection = GCOLOR3_COLOR_SELECTION (widget);
-- Gcolor3ColorSelectionPrivate *priv = cselection->private_data;
-+ Gcolor3ColorSelection *colorsel = GCOLOR3_COLOR_SELECTION (widget);
-+ Gcolor3ColorSelectionPrivate *priv = colorsel->private_data;
-
-- if (priv->dropper_grab_widget)
-- {
-- gtk_widget_destroy (priv->dropper_grab_widget);
-- priv->dropper_grab_widget = NULL;
-- }
-+ g_cancellable_cancel (priv->cancellable);
-
- GTK_WIDGET_CLASS (gcolor3_color_selection_parent_class)->destroy (widget);
- }
-@@ -706,15 +639,6 @@ gcolor3_color_selection_show_all (GtkWidget *widget)
- gtk_widget_show (widget);
- }
-
--static gboolean
--gcolor3_color_selection_grab_broken (GtkWidget *widget,
-- UNUSED GdkEventGrabBroken *event)
--{
-- shutdown_eyedropper (widget);
--
-- return TRUE;
--}
--
- /*
- *
- * The Sample Color
-@@ -1636,34 +1560,6 @@ palette_new (Gcolor3ColorSelection *colorsel)
-
- /* The actual Gcolor3ColorSelection widget */
-
--static GdkCursor *
--make_picker_cursor (GdkScreen *screen)
--{
-- GdkCursor *cursor;
--
-- cursor = gdk_cursor_new_from_name (gdk_screen_get_display (screen),
-- "color-picker");
--
-- if (!cursor)
-- {
-- GdkPixbuf *pixbuf;
--
-- pixbuf = gdk_pixbuf_new_from_data (dropper_bits,
-- GDK_COLORSPACE_RGB, TRUE, 8,
-- DROPPER_WIDTH, DROPPER_HEIGHT,
-- DROPPER_STRIDE,
-- NULL, NULL);
--
-- cursor = gdk_cursor_new_from_pixbuf (gdk_screen_get_display (screen),
-- pixbuf,
-- DROPPER_X_HOT, DROPPER_Y_HOT);
--
-- g_object_unref (pixbuf);
-- }
--
-- return cursor;
--}
--
- static void
- grab_color_at_pointer (GdkScreen *screen,
- GdkDevice *device,
-@@ -1710,27 +1606,6 @@ grab_color_at_pointer (GdkScreen *screen,
- update_color (colorsel);
- }
-
--static void
--shutdown_eyedropper (GtkWidget *widget)
--{
-- Gcolor3ColorSelection *colorsel;
-- Gcolor3ColorSelectionPrivate *priv;
--
-- colorsel = GCOLOR3_COLOR_SELECTION (widget);
-- priv = colorsel->private_data;
--
-- if (priv->has_grab)
-- {
-- gdk_seat_ungrab (gdk_device_get_seat (priv->keyboard_device));
-- gdk_seat_ungrab (gdk_device_get_seat(priv->pointer_device));
-- gtk_device_grab_remove (priv->dropper_grab_widget, priv->pointer_device);
--
-- priv->has_grab = FALSE;
-- priv->keyboard_device = NULL;
-- priv->pointer_device = NULL;
-- }
--}
--
- static void
- mouse_motion (UNUSED GtkWidget *invisible,
- GdkEventMotion *event,
-@@ -1755,8 +1630,6 @@ mouse_release (GtkWidget *invisible,
- gdk_event_get_device ((GdkEvent *) event),
- event->x_root, event->y_root, data);
-
-- shutdown_eyedropper (GTK_WIDGET (data));
--
- g_signal_handlers_disconnect_by_func (invisible,
- mouse_motion,
- data);
-@@ -1798,8 +1671,6 @@ key_press (GtkWidget *invisible,
- /* fall through */
-
- case GDK_KEY_Escape:
-- shutdown_eyedropper (data);
--
- g_signal_handlers_disconnect_by_func (invisible,
- mouse_press,
- data);
-@@ -1868,95 +1739,57 @@ get_screen_color (GtkWidget *button)
- {
- Gcolor3ColorSelection *colorsel = g_object_get_data (G_OBJECT (button), "COLORSEL");
- Gcolor3ColorSelectionPrivate *priv = colorsel->private_data;
-- GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (button));
-- GdkDevice *device, *keyb_device, *pointer_device;
-- GdkSeat *keyb_seat, *pointer_seat;
-- GdkCursor *picker_cursor;
-- GdkGrabStatus grab_status;
-- GdkWindow *window;
-- GtkWidget *grab_widget, *toplevel;
--
-- guint32 time = gtk_get_current_event_time ();
--
-- device = gtk_get_current_event_device ();
--
-- if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
-- {
-- keyb_device = device;
-- keyb_seat = gdk_device_get_seat (keyb_device);
-- pointer_device = gdk_device_get_associated_device (device);
-- pointer_seat = gdk_device_get_seat (pointer_device);
-- }
-- else
-- {
-- pointer_device = device;
-- pointer_seat = gdk_device_get_seat (pointer_device);
-- keyb_device = gdk_device_get_associated_device (device);
-- keyb_seat = gdk_device_get_seat (keyb_device);
-- }
-+ XdpPortal *portal;
-+ XdpParent *parent;
-+ GtkWindow *window;
-+ GtkApplication *app;
-
-- if (priv->dropper_grab_widget == NULL)
-- {
-- grab_widget = gtk_window_new (GTK_WINDOW_POPUP);
-- gtk_window_set_screen (GTK_WINDOW (grab_widget), screen);
-- gtk_window_resize (GTK_WINDOW (grab_widget), 1, 1);
-- gtk_window_move (GTK_WINDOW (grab_widget), -100, -100);
-- gtk_widget_show (grab_widget);
--
-- gtk_widget_add_events (grab_widget,
-- GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK);
--
-- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (colorsel));
-+ app = GTK_APPLICATION (g_application_get_default ());
-+ window = gtk_application_get_active_window (app);
-
-- if (GTK_IS_WINDOW (toplevel))
-- {
-- if (gtk_window_has_group (GTK_WINDOW (toplevel)))
-- gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (toplevel)),
-- GTK_WINDOW (grab_widget));
-- }
-+ portal = xdp_portal_new ();
-+ parent = xdp_parent_new_gtk (window);
-
-- priv->dropper_grab_widget = grab_widget;
-- }
--
-- window = gtk_widget_get_window (priv->dropper_grab_widget);
--
-- if (gdk_seat_grab (keyb_seat,
-- window,
-- GDK_SEAT_CAPABILITY_ALL, FALSE,
-- NULL,
-- gtk_get_current_event (),
-- NULL, NULL) != GDK_GRAB_SUCCESS)
-- return;
-+ xdp_portal_pick_color (portal, parent,
-+ priv->cancellable,
-+ pick_color_cb, colorsel);
-+}
-
-- picker_cursor = make_picker_cursor (screen);
-- grab_status = gdk_seat_grab (pointer_seat,
-- window,
-- GDK_SEAT_CAPABILITY_ALL, FALSE,
-- picker_cursor,
-- gtk_get_current_event (),
-- NULL, NULL);
-+static void
-+pick_color_cb (GObject *source_object,
-+ GAsyncResult *result,
-+ gpointer user_data)
-+{
-+ Gcolor3ColorSelection *colorsel;
-+ Gcolor3ColorSelectionPrivate *priv;
-+ GdkRGBA color;
-+ GVariant *variant;
-+ GError *error = NULL;
-
-- g_object_unref (picker_cursor);
-+ colorsel = GCOLOR3_COLOR_SELECTION (user_data);
-+ priv = colorsel->private_data;
-
-- if (grab_status != GDK_GRAB_SUCCESS)
-+ variant = xdp_portal_pick_color_finish (XDP_PORTAL (source_object), result, &error);
-+ if (!variant)
- {
-- gdk_seat_ungrab (keyb_seat);
-+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
-+ g_warning ("Failed to pick color: %s", error->message);
-+ g_error_free (error);
- return;
- }
-
-- gtk_device_grab_add (priv->dropper_grab_widget,
-- pointer_device,
-- TRUE);
--
-- priv->grab_time = time;
-- priv->has_grab = TRUE;
-- priv->keyboard_device = keyb_device;
-- priv->pointer_device = pointer_device;
-+ g_variant_get (variant, "(ddd)", &color.red, &color.green, &color.blue);
-
-- g_signal_connect (priv->dropper_grab_widget, "button-press-event",
-- G_CALLBACK (mouse_press), colorsel);
-- g_signal_connect (priv->dropper_grab_widget, "key-press-event",
-- G_CALLBACK (key_press), colorsel);
-+ priv->color[COLORSEL_RED] = color.red;
-+ priv->color[COLORSEL_GREEN] = color.green;
-+ priv->color[COLORSEL_BLUE] = color.blue;
-+ gtk_rgb_to_hsv (priv->color[COLORSEL_RED],
-+ priv->color[COLORSEL_GREEN],
-+ priv->color[COLORSEL_BLUE],
-+ &priv->color[COLORSEL_HUE],
-+ &priv->color[COLORSEL_SATURATION],
-+ &priv->color[COLORSEL_VALUE]);
-+ update_color (colorsel);
- }
-
- static void
-diff --git a/src/meson.build b/src/meson.build
-index c95b557..3998f68 100644
---- a/src/meson.build
-+++ b/src/meson.build
-@@ -41,6 +41,7 @@ executable(
- ],
- dependencies: [
- dep_gtk,
-+ dep_libportal,
- dep_lm
- ],
- install: true,
---
-GitLab
-
Copied: gcolor3/repos/community-x86_64/portal.patch (from rev 1189573, gcolor3/trunk/portal.patch)
===================================================================
--- portal.patch (rev 0)
+++ portal.patch 2022-04-24 12:51:27 UTC (rev 1189574)
@@ -0,0 +1,526 @@
+From d0cc2acd9dd67e51500b5ce96519ed21d2fc4776 Mon Sep 17 00:00:00 2001
+From: Christopher Davis <brainblasted at disroot.org>
+Date: Tue, 25 Aug 2020 18:03:29 -0700
+Subject: [PATCH] build: Add libportal as a subproject
+
+Should make Color Picker simpler to build on distros
+that don't yet ship libportal.
+---
+ .gitignore | 1 +
+ meson.build | 11 ++++++-----
+ subprojects/libportal.wrap | 4 ++++
+ 3 files changed, 11 insertions(+), 5 deletions(-)
+ create mode 100644 subprojects/libportal.wrap
+
+diff --git a/.gitignore b/.gitignore
+index 797d03e..697ee9e 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -6,3 +6,4 @@ build/
+ *.lo
+ *.o
+ *.gresource
++/subprojects/libportal/
+diff --git a/meson.build b/meson.build
+index 5ffa858..195de61 100644
+--- a/meson.build
++++ b/meson.build
+@@ -1,14 +1,15 @@
+ project('gcolor3', 'c', version: '2.3.1',
+ license: 'GPL2+',
+ meson_version: '>= 0.40.0',
+- default_options: [
+- 'c_std=c99',
+- 'werror=true'
+- ]
+ )
+
+ dep_gtk = dependency('gtk+-3.0', version: '>= 3.20.0', required: true)
+-dep_libportal = dependency('libportal', required: true)
++dep_libportal = dependency(
++ 'libportal',
++ required: true,
++ fallback: ['libportal', 'libportal_dep'],
++ default_options: ['gtk_doc=false'],
++)
+ cc = meson.get_compiler('c')
+ dep_lm = cc.find_library('m', required: true)
+
+diff --git a/subprojects/libportal.wrap b/subprojects/libportal.wrap
+new file mode 100644
+index 0000000..0ee4948
+--- /dev/null
++++ b/subprojects/libportal.wrap
+@@ -0,0 +1,4 @@
++[wrap-git]
++directory=libportal
++url=https://github.com/flatpak/libportal.git
++revision=origin/master
+From f68055ce3f91001503a31753b03836b6cf86b3dd Mon Sep 17 00:00:00 2001
+From: Christopher Davis <brainblasted at disroot.org>
+Date: Thu, 14 Nov 2019 16:09:21 -0800
+Subject: [PATCH] color-selection: Use libportal for Wayland suport
+
+Greatly simplify our color selection code by
+using libportal instead of implementing it manually.
+
+Fixes https://gitlab.gnome.org/World/gcolor3/issues/38
+---
+ meson.build | 1 +
+ nl.hjdskes.gcolor3.json | 10 ++
+ src/gcolor3-color-selection.c | 275 +++++++---------------------------
+ src/meson.build | 1 +
+ 4 files changed, 66 insertions(+), 221 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index e5d737b..5ffa858 100644
+--- a/meson.build
++++ b/meson.build
+@@ -8,6 +8,7 @@ project('gcolor3', 'c', version: '2.3.1',
+ )
+
+ dep_gtk = dependency('gtk+-3.0', version: '>= 3.20.0', required: true)
++dep_libportal = dependency('libportal', required: true)
+ cc = meson.get_compiler('c')
+ dep_lm = cc.find_library('m', required: true)
+
+diff --git a/nl.hjdskes.gcolor3.json b/nl.hjdskes.gcolor3.json
+index 04d495a..8ad4423 100644
+--- a/nl.hjdskes.gcolor3.json
++++ b/nl.hjdskes.gcolor3.json
+@@ -17,6 +17,16 @@
+ "/share/man"
+ ],
+ "modules": [
++ {
++ "name": "libportal",
++ "buildsystem": "meson",
++ "sources": [
++ {
++ "type": "git",
++ "url": "https://github.com/flatpak/libportal.git"
++ }
++ ]
++ },
+ {
+ "name": "gcolor3",
+ "buildsystem": "meson",
+diff --git a/src/gcolor3-color-selection.c b/src/gcolor3-color-selection.c
+index 58503d7..6eccf43 100644
+--- a/src/gcolor3-color-selection.c
++++ b/src/gcolor3-color-selection.c
+@@ -37,11 +37,11 @@
+ #include <math.h>
+ #include <string.h>
+ #include <gdk/gdk.h>
+-#ifdef GDK_WINDOWING_WAYLAND
+-#include <gdk/gdkwayland.h>
+-#endif
++#include <gio/gio.h>
+ #include <gtk/gtk.h>
+ #include <glib/gi18n.h>
++#include <libportal/portal.h>
++#include <libportal/portal-gtk3.h>
+
+ #ifdef ENABLE_NLS
+ #define P_(String) g_dgettext(GETTEXT_PACKAGE "-properties",String)
+@@ -153,11 +153,7 @@ struct _Gcolor3ColorSelectionPrivate
+ GtkWidget *cur_sample;
+ GtkWidget *colorsel;
+
+- /* Window for grabbing on */
+- GtkWidget *dropper_grab_widget;
+- guint32 grab_time;
+- GdkDevice *keyboard_device;
+- GdkDevice *pointer_device;
++ GCancellable *cancellable;
+
+ /* Connection to settings */
+ gulong settings_connection;
+@@ -179,8 +175,6 @@ static void gcolor3_color_selection_get_property (GObject *ob
+ static void gcolor3_color_selection_realize (GtkWidget *widget);
+ static void gcolor3_color_selection_unrealize (GtkWidget *widget);
+ static void gcolor3_color_selection_show_all (GtkWidget *widget);
+-static gboolean gcolor3_color_selection_grab_broken (GtkWidget *widget,
+- GdkEventGrabBroken *event);
+
+ static void gcolor3_color_selection_set_palette_color (Gcolor3ColorSelection *colorsel,
+ gint index,
+@@ -201,6 +195,9 @@ static void make_all_relations (AtkObject
+ static void hsv_changed (GtkWidget *hsv,
+ gpointer data);
+ static void get_screen_color (GtkWidget *button);
++static void pick_color_cb (GObject *source_object,
++ GAsyncResult *result,
++ gpointer user_data);
+ static void adjustment_changed (GtkAdjustment *adjustment,
+ gpointer data);
+ static void opacity_entry_changed (GtkWidget *opacity_entry,
+@@ -236,56 +233,12 @@ static void palette_change_notify_instance (GObject *object,
+ GParamSpec *pspec,
+ gpointer data);
+ static void update_palette (Gcolor3ColorSelection *colorsel);
+-static void shutdown_eyedropper (GtkWidget *widget);
+
+ static guint color_selection_signals[LAST_SIGNAL] = { 0 };
+
+ static Gcolor3ColorSelectionChangePaletteFunc noscreen_change_palette_hook = default_noscreen_change_palette_func;
+ static Gcolor3ColorSelectionChangePaletteWithScreenFunc change_palette_hook = default_change_palette_func;
+
+-static const guchar dropper_bits[] = {
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
+- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377"
+- "\0\0\0\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+- "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\377\377\377\377"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+- "\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0\377\0\0"
+- "\0\377\0\0\0\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\0\0\0\377\0"
+- "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\377\377\377"
+- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\377\377\377\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+- "\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\377\0\0"
+- "\0\377\0\0\0\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+- "\377\377\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0\377\377\377"
+- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377"
+- "\0\0\0\377\377\377\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+- "\377\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0\0\0\0\0\0\377\377"
+- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0"
+- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
+- "\377\377\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+- "\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\0\0"
+- "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0"
+- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+-
+ G_DEFINE_TYPE_WITH_PRIVATE (Gcolor3ColorSelection, gcolor3_color_selection, GTK_TYPE_BOX)
+
+ static void
+@@ -304,7 +257,6 @@ gcolor3_color_selection_class_init (Gcolor3ColorSelectionClass *klass)
+ widget_class->realize = gcolor3_color_selection_realize;
+ widget_class->unrealize = gcolor3_color_selection_unrealize;
+ widget_class->show_all = gcolor3_color_selection_show_all;
+- widget_class->grab_broken_event = gcolor3_color_selection_grab_broken;
+
+ g_object_class_install_property (gobject_class,
+ PROP_HAS_OPACITY_CONTROL,
+@@ -393,6 +345,7 @@ gcolor3_color_selection_init (Gcolor3ColorSelection *colorsel)
+ priv->changing = FALSE;
+ priv->default_set = FALSE;
+ priv->default_alpha_set = FALSE;
++ priv->cancellable = g_cancellable_new ();
+
+ top_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
+ gtk_box_pack_start (GTK_BOX (colorsel), top_hbox, FALSE, FALSE, 0);
+@@ -430,25 +383,9 @@ gcolor3_color_selection_init (Gcolor3ColorSelection *colorsel)
+ gtk_widget_show (GTK_WIDGET (picker_image));
+ gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+
+-#ifdef GDK_WINDOWING_WAYLAND
+- if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default()))
+- {
+- gtk_widget_set_sensitive (button, FALSE);
+- gtk_widget_set_tooltip_text (button,
+- _("Picking a color is currently not supported on "
+- "Wayland."));
+- }
+-#else
+- if (FALSE)
+- {
+- }
+-#endif
+- else
+- {
+- gtk_widget_set_tooltip_text (button,
+- _("Click the eyedropper, then click a color "
+- "anywhere on your screen to select that color."));
+- }
++ gtk_widget_set_tooltip_text (button,
++ _("Click the eyedropper, then click a color "
++ "anywhere on your screen to select that color."));
+
+ top_right_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
+ gtk_box_pack_start (GTK_BOX (top_hbox), top_right_vbox, FALSE, FALSE, 0);
+@@ -656,14 +593,10 @@ gcolor3_color_selection_get_property (GObject *object,
+ static void
+ gcolor3_color_selection_destroy (GtkWidget *widget)
+ {
+- Gcolor3ColorSelection *cselection = GCOLOR3_COLOR_SELECTION (widget);
+- Gcolor3ColorSelectionPrivate *priv = cselection->private_data;
++ Gcolor3ColorSelection *colorsel = GCOLOR3_COLOR_SELECTION (widget);
++ Gcolor3ColorSelectionPrivate *priv = colorsel->private_data;
+
+- if (priv->dropper_grab_widget)
+- {
+- gtk_widget_destroy (priv->dropper_grab_widget);
+- priv->dropper_grab_widget = NULL;
+- }
++ g_cancellable_cancel (priv->cancellable);
+
+ GTK_WIDGET_CLASS (gcolor3_color_selection_parent_class)->destroy (widget);
+ }
+@@ -706,15 +639,6 @@ gcolor3_color_selection_show_all (GtkWidget *widget)
+ gtk_widget_show (widget);
+ }
+
+-static gboolean
+-gcolor3_color_selection_grab_broken (GtkWidget *widget,
+- UNUSED GdkEventGrabBroken *event)
+-{
+- shutdown_eyedropper (widget);
+-
+- return TRUE;
+-}
+-
+ /*
+ *
+ * The Sample Color
+@@ -1636,34 +1560,6 @@ palette_new (Gcolor3ColorSelection *colorsel)
+
+ /* The actual Gcolor3ColorSelection widget */
+
+-static GdkCursor *
+-make_picker_cursor (GdkScreen *screen)
+-{
+- GdkCursor *cursor;
+-
+- cursor = gdk_cursor_new_from_name (gdk_screen_get_display (screen),
+- "color-picker");
+-
+- if (!cursor)
+- {
+- GdkPixbuf *pixbuf;
+-
+- pixbuf = gdk_pixbuf_new_from_data (dropper_bits,
+- GDK_COLORSPACE_RGB, TRUE, 8,
+- DROPPER_WIDTH, DROPPER_HEIGHT,
+- DROPPER_STRIDE,
+- NULL, NULL);
+-
+- cursor = gdk_cursor_new_from_pixbuf (gdk_screen_get_display (screen),
+- pixbuf,
+- DROPPER_X_HOT, DROPPER_Y_HOT);
+-
+- g_object_unref (pixbuf);
+- }
+-
+- return cursor;
+-}
+-
+ static void
+ grab_color_at_pointer (GdkScreen *screen,
+ GdkDevice *device,
+@@ -1710,27 +1606,6 @@ grab_color_at_pointer (GdkScreen *screen,
+ update_color (colorsel);
+ }
+
+-static void
+-shutdown_eyedropper (GtkWidget *widget)
+-{
+- Gcolor3ColorSelection *colorsel;
+- Gcolor3ColorSelectionPrivate *priv;
+-
+- colorsel = GCOLOR3_COLOR_SELECTION (widget);
+- priv = colorsel->private_data;
+-
+- if (priv->has_grab)
+- {
+- gdk_seat_ungrab (gdk_device_get_seat (priv->keyboard_device));
+- gdk_seat_ungrab (gdk_device_get_seat(priv->pointer_device));
+- gtk_device_grab_remove (priv->dropper_grab_widget, priv->pointer_device);
+-
+- priv->has_grab = FALSE;
+- priv->keyboard_device = NULL;
+- priv->pointer_device = NULL;
+- }
+-}
+-
+ static void
+ mouse_motion (UNUSED GtkWidget *invisible,
+ GdkEventMotion *event,
+@@ -1755,8 +1630,6 @@ mouse_release (GtkWidget *invisible,
+ gdk_event_get_device ((GdkEvent *) event),
+ event->x_root, event->y_root, data);
+
+- shutdown_eyedropper (GTK_WIDGET (data));
+-
+ g_signal_handlers_disconnect_by_func (invisible,
+ mouse_motion,
+ data);
+@@ -1798,8 +1671,6 @@ key_press (GtkWidget *invisible,
+ /* fall through */
+
+ case GDK_KEY_Escape:
+- shutdown_eyedropper (data);
+-
+ g_signal_handlers_disconnect_by_func (invisible,
+ mouse_press,
+ data);
+@@ -1868,95 +1739,57 @@ get_screen_color (GtkWidget *button)
+ {
+ Gcolor3ColorSelection *colorsel = g_object_get_data (G_OBJECT (button), "COLORSEL");
+ Gcolor3ColorSelectionPrivate *priv = colorsel->private_data;
+- GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (button));
+- GdkDevice *device, *keyb_device, *pointer_device;
+- GdkSeat *keyb_seat, *pointer_seat;
+- GdkCursor *picker_cursor;
+- GdkGrabStatus grab_status;
+- GdkWindow *window;
+- GtkWidget *grab_widget, *toplevel;
+-
+- guint32 time = gtk_get_current_event_time ();
+-
+- device = gtk_get_current_event_device ();
+-
+- if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
+- {
+- keyb_device = device;
+- keyb_seat = gdk_device_get_seat (keyb_device);
+- pointer_device = gdk_device_get_associated_device (device);
+- pointer_seat = gdk_device_get_seat (pointer_device);
+- }
+- else
+- {
+- pointer_device = device;
+- pointer_seat = gdk_device_get_seat (pointer_device);
+- keyb_device = gdk_device_get_associated_device (device);
+- keyb_seat = gdk_device_get_seat (keyb_device);
+- }
++ XdpPortal *portal;
++ XdpParent *parent;
++ GtkWindow *window;
++ GtkApplication *app;
+
+- if (priv->dropper_grab_widget == NULL)
+- {
+- grab_widget = gtk_window_new (GTK_WINDOW_POPUP);
+- gtk_window_set_screen (GTK_WINDOW (grab_widget), screen);
+- gtk_window_resize (GTK_WINDOW (grab_widget), 1, 1);
+- gtk_window_move (GTK_WINDOW (grab_widget), -100, -100);
+- gtk_widget_show (grab_widget);
+-
+- gtk_widget_add_events (grab_widget,
+- GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK);
+-
+- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (colorsel));
++ app = GTK_APPLICATION (g_application_get_default ());
++ window = gtk_application_get_active_window (app);
+
+- if (GTK_IS_WINDOW (toplevel))
+- {
+- if (gtk_window_has_group (GTK_WINDOW (toplevel)))
+- gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (toplevel)),
+- GTK_WINDOW (grab_widget));
+- }
++ portal = xdp_portal_new ();
++ parent = xdp_parent_new_gtk (window);
+
+- priv->dropper_grab_widget = grab_widget;
+- }
+-
+- window = gtk_widget_get_window (priv->dropper_grab_widget);
+-
+- if (gdk_seat_grab (keyb_seat,
+- window,
+- GDK_SEAT_CAPABILITY_ALL, FALSE,
+- NULL,
+- gtk_get_current_event (),
+- NULL, NULL) != GDK_GRAB_SUCCESS)
+- return;
++ xdp_portal_pick_color (portal, parent,
++ priv->cancellable,
++ pick_color_cb, colorsel);
++}
+
+- picker_cursor = make_picker_cursor (screen);
+- grab_status = gdk_seat_grab (pointer_seat,
+- window,
+- GDK_SEAT_CAPABILITY_ALL, FALSE,
+- picker_cursor,
+- gtk_get_current_event (),
+- NULL, NULL);
++static void
++pick_color_cb (GObject *source_object,
++ GAsyncResult *result,
++ gpointer user_data)
++{
++ Gcolor3ColorSelection *colorsel;
++ Gcolor3ColorSelectionPrivate *priv;
++ GdkRGBA color;
++ GVariant *variant;
++ GError *error = NULL;
+
+- g_object_unref (picker_cursor);
++ colorsel = GCOLOR3_COLOR_SELECTION (user_data);
++ priv = colorsel->private_data;
+
+- if (grab_status != GDK_GRAB_SUCCESS)
++ variant = xdp_portal_pick_color_finish (XDP_PORTAL (source_object), result, &error);
++ if (!variant)
+ {
+- gdk_seat_ungrab (keyb_seat);
++ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
++ g_warning ("Failed to pick color: %s", error->message);
++ g_error_free (error);
+ return;
+ }
+
+- gtk_device_grab_add (priv->dropper_grab_widget,
+- pointer_device,
+- TRUE);
+-
+- priv->grab_time = time;
+- priv->has_grab = TRUE;
+- priv->keyboard_device = keyb_device;
+- priv->pointer_device = pointer_device;
++ g_variant_get (variant, "(ddd)", &color.red, &color.green, &color.blue);
+
+- g_signal_connect (priv->dropper_grab_widget, "button-press-event",
+- G_CALLBACK (mouse_press), colorsel);
+- g_signal_connect (priv->dropper_grab_widget, "key-press-event",
+- G_CALLBACK (key_press), colorsel);
++ priv->color[COLORSEL_RED] = color.red;
++ priv->color[COLORSEL_GREEN] = color.green;
++ priv->color[COLORSEL_BLUE] = color.blue;
++ gtk_rgb_to_hsv (priv->color[COLORSEL_RED],
++ priv->color[COLORSEL_GREEN],
++ priv->color[COLORSEL_BLUE],
++ &priv->color[COLORSEL_HUE],
++ &priv->color[COLORSEL_SATURATION],
++ &priv->color[COLORSEL_VALUE]);
++ update_color (colorsel);
+ }
+
+ static void
+diff --git a/src/meson.build b/src/meson.build
+index c95b557..3998f68 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -41,6 +41,7 @@ executable(
+ ],
+ dependencies: [
+ dep_gtk,
++ dep_libportal,
+ dep_lm
+ ],
+ install: true,
+--
+GitLab
+
More information about the arch-commits
mailing list