Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-3.0-or-later
2 : : // SPDX-FileCopyrightText: Andy Holmes <andrew.g.r.holmes@gmail.com>
3 : :
4 : : #define G_LOG_DOMAIN "valent-xdp-utils"
5 : :
6 : : #include "config.h"
7 : :
8 : : #include <libportal/portal.h>
9 : : #if defined(HAVE_GTK4) && defined(HAVE_LIBPORTAL_GTK4)
10 : : #include <gtk/gtk.h>
11 : : #include <libportal-gtk4/portal-gtk4.h>
12 : : #endif /* HAVE_GTK4 && HAVE_LIBPORTAL_GTK4 */
13 : :
14 : : #include "valent-xdp-utils.h"
15 : :
16 : :
17 : : static XdpPortal *default_portal = NULL;
18 : :
19 : :
20 : : #if defined(HAVE_GTK4) && defined(HAVE_LIBPORTAL_GTK4)
21 : : static GtkWindow *
22 : 0 : valent_xdp_get_active_window (void)
23 : : {
24 : 0 : GListModel *windows = NULL;
25 : 0 : unsigned int n_windows = 0;
26 : :
27 : 0 : windows = gtk_window_get_toplevels ();
28 : 0 : n_windows = g_list_model_get_n_items (windows);
29 : :
30 : 0 : for (unsigned int i = 0; i < n_windows; i++)
31 : : {
32 : 0 : g_autoptr (GtkWindow) window = g_list_model_get_item (windows, i);
33 : :
34 : 0 : if (gtk_window_is_active (window))
35 : : return g_steal_pointer (&window);
36 : : }
37 : :
38 : : return NULL;
39 : : }
40 : : #endif /* HAVE_GTK4 */
41 : :
42 : : /**
43 : : * valent_xdp_get_default:
44 : : *
45 : : * Get the default [class@Xdp.Portal] object for Valent.
46 : : *
47 : : * Returns: (transfer none): a `XdpPortal`
48 : : */
49 : : XdpPortal *
50 : 0 : valent_xdp_get_default (void)
51 : : {
52 : 0 : if (default_portal == NULL)
53 : 0 : default_portal = xdp_portal_new ();
54 : :
55 : 0 : return default_portal;
56 : : }
57 : :
58 : : /**
59 : : * valent_xdp_get_parent:
60 : : *
61 : : * Get an [class@Xdp.Parent], if available.
62 : : *
63 : : * If Valent was compiled without support for libportal-gtk4 or there is no
64 : : * active window, this function will return %NULL.
65 : : *
66 : : * Returns: (nullable) (transfer full): a `XdpParent`
67 : : */
68 : : XdpParent *
69 : 0 : valent_xdp_get_parent (void)
70 : : {
71 : : #if defined(HAVE_GTK4) && defined(HAVE_LIBPORTAL_GTK4)
72 : 0 : g_autoptr (GtkWindow) window = NULL;
73 : :
74 : 0 : window = valent_xdp_get_active_window ();
75 : 0 : if (window != NULL)
76 : 0 : return xdp_parent_new_gtk (window);
77 : : #endif /* HAVE_GTK4 && HAVE_LIBPORTAL_GTK4 */
78 : :
79 : : return NULL;
80 : : }
81 : :
82 : : /**
83 : : * valent_xdp_has_parent:
84 : : *
85 : : * Check if an active parent is available.
86 : : *
87 : : * If Valent was compiled without support for libportal-gtk4 or there is no
88 : : * active window, this function will return %FALSE.
89 : : *
90 : : * Returns: %TRUE if there is an active window, or %FALSE if not
91 : : */
92 : : gboolean
93 : 0 : valent_xdp_has_parent (void)
94 : : {
95 : 0 : g_autoptr (XdpParent) parent = valent_xdp_get_parent ();
96 : :
97 : 0 : return parent != NULL;
98 : : }
99 : :
|