[arch-commits] Commit in gcolor3/repos/community-x86_64 (3 files)
Balló György
bgyorgy at archlinux.org
Fri Apr 30 15:57:09 UTC 2021
Date: Friday, April 30, 2021 @ 15:57:09
Author: bgyorgy
Revision: 925373
archrelease: copy trunk to community-x86_64
Added:
gcolor3/repos/community-x86_64/PKGBUILD
(from rev 925372, gcolor3/trunk/PKGBUILD)
gcolor3/repos/community-x86_64/portal.patch
(from rev 925372, gcolor3/trunk/portal.patch)
Deleted:
gcolor3/repos/community-x86_64/PKGBUILD
--------------+
PKGBUILD | 67 +++----
portal.patch | 526 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 561 insertions(+), 32 deletions(-)
Deleted: PKGBUILD
===================================================================
--- PKGBUILD 2021-04-30 15:57:00 UTC (rev 925372)
+++ PKGBUILD 2021-04-30 15:57:09 UTC (rev 925373)
@@ -1,32 +0,0 @@
-# Maintainer: Balló György <ballogyor+arch at gmail dot com>
-
-pkgname=gcolor3
-pkgver=2.4.0
-pkgrel=2
-pkgdesc="Simple color chooser written in GTK3 (relies on xdg-desktop-portal implementation)"
-arch=(x86_64)
-url="https://www.hjdskes.nl/projects/gcolor3/"
-license=(GPL2)
-depends=(gtk3 libportal xdg-desktop-portal)
-makedepends=(git meson)
-_commit=7053f9e6a890175fc212df625e02ffbdce418146 # tags/v2.4.0
-source=("git+https://gitlab.gnome.org/World/gcolor3.git#commit=$_commit")
-sha256sums=('SKIP')
-
-pkgver() {
- cd $pkgname
- git describe --tags | sed 's/^v//;s/-/+/g'
-}
-
-build() {
- arch-meson $pkgname 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 925372, gcolor3/trunk/PKGBUILD)
===================================================================
--- PKGBUILD (rev 0)
+++ PKGBUILD 2021-04-30 15:57:09 UTC (rev 925373)
@@ -0,0 +1,35 @@
+# 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/portal.patch (from rev 925372, gcolor3/trunk/portal.patch)
===================================================================
--- portal.patch (rev 0)
+++ portal.patch 2021-04-30 15:57:09 UTC (rev 925373)
@@ -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