[gnome-shell/wip/fmuellner/gtk4: 248/248] wip: Port extensions app/portal to GTK4
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/fmuellner/gtk4: 248/248] wip: Port extensions app/portal to GTK4
- Date: Sat, 1 Aug 2020 02:48:56 +0000 (UTC)
commit e7a502e5c34041b2fbd3e17be928b07f7efaba45
Author: Florian Müllner <fmuellner gnome org>
Date: Wed Apr 15 20:27:15 2020 +0200
wip: Port extensions app/portal to GTK4
js/dbusServices/extensions/css/application.css | 6 +-
js/dbusServices/extensions/extensionsService.js | 17 +-
js/dbusServices/extensions/main.js | 6 +-
.../extensions/ui/extension-prefs-dialog.ui | 128 +++------
.../extensions-app/data/ui/extension-row.ui | 143 ++++------
.../extensions-app/data/ui/extensions-window.ui | 302 ++++++++++-----------
subprojects/extensions-app/js/main.js | 45 +--
subprojects/shew/meson.build | 3 +-
subprojects/shew/src/meson.build | 4 +-
.../shew/src/shew-external-window-wayland.c | 6 +-
subprojects/shew/src/shew-external-window-x11.c | 55 ++--
subprojects/shew/src/shew-external-window.c | 4 +-
subprojects/shew/src/shew-external-window.h | 4 +-
subprojects/shew/src/shew-window-exporter.c | 20 +-
14 files changed, 312 insertions(+), 431 deletions(-)
---
diff --git a/js/dbusServices/extensions/css/application.css b/js/dbusServices/extensions/css/application.css
index 06914ea3c1..1acbf36c89 100644
--- a/js/dbusServices/extensions/css/application.css
+++ b/js/dbusServices/extensions/css/application.css
@@ -1,2 +1,6 @@
.expander-frame > * { border-top-width: 0; }
-.expander-toolbar { border: 0 solid @borders; border-top-width: 1px; }
+.expander-toolbar {
+ border: 0 solid @borders;
+ border-top-width: 1px;
+ padding: 3px;
+}
diff --git a/js/dbusServices/extensions/extensionsService.js b/js/dbusServices/extensions/extensionsService.js
index 9d444c5510..3f94b22de9 100644
--- a/js/dbusServices/extensions/extensionsService.js
+++ b/js/dbusServices/extensions/extensionsService.js
@@ -128,7 +128,7 @@ var ExtensionsService = class extends ServiceImplementation {
externalWindow = Shew.ExternalWindow.new_from_handle(parentWindow);
if (externalWindow)
- externalWindow.set_parent_of(window.window);
+ externalWindow.set_parent_of(window.get_surface());
if (options.modal)
window.modal = options.modal.get_boolean();
@@ -156,7 +156,6 @@ var ExtensionPrefsDialog = GObject.registerClass({
GTypeName: 'ExtensionPrefsDialog',
Template: 'resource:///org/gnome/Shell/Extensions/ui/extension-prefs-dialog.ui',
InternalChildren: [
- 'headerBar',
'stack',
'expander',
'expanderArrow',
@@ -165,24 +164,24 @@ var ExtensionPrefsDialog = GObject.registerClass({
],
}, class ExtensionPrefsDialog extends Gtk.Window {
_init(extension) {
- super._init();
+ super._init({
+ title: extension.metadata.name,
+ });
this._uuid = extension.uuid;
this._url = extension.metadata.url || '';
- this._headerBar.title = extension.metadata.name;
-
this._actionGroup = new Gio.SimpleActionGroup();
this.insert_action_group('win', this._actionGroup);
this._initActions();
this._addCustomStylesheet();
- this._gesture = new Gtk.GestureMultiPress({
- widget: this._expander,
+ this._gesture = new Gtk.GestureClick({
button: 0,
exclusive: true,
});
+ this._expander.add_controller(this._gesture);
this._gesture.connect('released', (gesture, nPress) => {
if (nPress === 1)
@@ -205,7 +204,7 @@ var ExtensionPrefsDialog = GObject.registerClass({
prefsModule.init(extension.metadata);
const widget = prefsModule.buildPrefsWidget();
- this._stack.add(widget);
+ this._stack.add_named(widget, 'prefs');
this._stack.visible_child = widget;
} catch (e) {
this._setError(e);
@@ -267,7 +266,7 @@ var ExtensionPrefsDialog = GObject.registerClass({
} catch (e) {
logError(e, 'Failed to add application style');
}
- Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),
+ Gtk.StyleContext.add_provider_for_display(Gdk.Display.get_default(),
provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
}
diff --git a/js/dbusServices/extensions/main.js b/js/dbusServices/extensions/main.js
index 9cc4bc5e33..0b6521e9e4 100644
--- a/js/dbusServices/extensions/main.js
+++ b/js/dbusServices/extensions/main.js
@@ -1,7 +1,7 @@
/* exported main */
-imports.gi.versions.Gdk = '3.0';
-imports.gi.versions.Gtk = '3.0';
+imports.gi.versions.Gdk = '4.0';
+imports.gi.versions.Gtk = '4.0';
const { Gtk } = imports.gi;
const pkg = imports.package;
@@ -10,7 +10,7 @@ const { DBusService } = imports.dbusService;
const { ExtensionsService } = imports.extensionsService;
function main() {
- Gtk.init(null);
+ Gtk.init();
pkg.initFormat();
const service = new DBusService(
diff --git a/js/dbusServices/extensions/ui/extension-prefs-dialog.ui
b/js/dbusServices/extensions/ui/extension-prefs-dialog.ui
index fc08eae3c2..d21842374c 100644
--- a/js/dbusServices/extensions/ui/extension-prefs-dialog.ui
+++ b/js/dbusServices/extensions/ui/extension-prefs-dialog.ui
@@ -1,38 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<template class="ExtensionPrefsDialog" parent="GtkWindow">
<property name="default_width">600</property>
<property name="default_height">400</property>
<child type="titlebar">
- <object class="GtkHeaderBar" id="headerBar">
- <property name="visible">True</property>
- <property name="show_close_button">True</property>
+ <object class="GtkHeaderBar">
+ <property name="show-title-buttons">True</property>
</object>
</child>
<child>
<object class="GtkStack" id="stack">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
<child>
<object class="GtkScrolledWindow">
- <property name="visible">True</property>
<property name="hscrollbar_policy">never</property>
<property name="propagate_natural_height">True</property>
<child>
<object class="GtkViewport">
- <property name="visible">True</property>
<child>
<object class="GtkBox">
- <property name="visible">True</property>
<property name="orientation">vertical</property>
- <property name="margin">100</property>
- <property name="margin_bottom">60</property>
+ <property name="margin-start">100</property>
+ <property name="margin-end">100</property>
+ <property name="margin-top">100</property>
+ <property name="margin-bottom">60</property>
<property name="spacing">12</property>
<child>
<object class="GtkLabel">
- <property name="visible">True</property>
<property name="label" translatable="yes">Something’s gone wrong</property>
<attributes>
<attribute name="scale" value="1.44"/> <!-- x-large -->
@@ -44,44 +38,33 @@
</child>
<child>
<object class="GtkLabel">
- <property name="visible">True</property>
<property name="label" translatable="yes">We’re very sorry, but there’s been a
problem: the settings for this extension can’t be displayed. We recommend that you report the issue to the
extension authors.</property>
<property name="justify">center</property>
<property name="wrap">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
</object>
</child>
<child>
<object class="GtkBox">
- <property name="visible">True</property>
<property name="orientation">vertical</property>
- <property name="margin_top">12</property>
+ <property name="margin-top">12</property>
<child>
<object class="GtkFrame" id="expander">
- <property name="visible">True</property>
<property name="hexpand">True</property>
- <property name="shadow_type">in</property>
<child>
- <object class="GtkEventBox">
- <property name="visible">True</property>
+ <object class="GtkBox">
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin-top">12</property>
+ <property name="margin-bottom">12</property>
+ <property name="spacing">6</property>
<child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="margin">12</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage" id="expanderArrow">
- <property name="visible">True</property>
- <property name="icon_name">pan-end-symbolic</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Technical
Details</property>
- </object>
- </child>
+ <object class="GtkImage" id="expanderArrow">
+ <property name="icon_name">pan-end-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">Technical Details</property>
</object>
</child>
</object>
@@ -90,22 +73,16 @@
</child>
<child>
<object class="GtkRevealer" id="revealer">
- <property name="visible">True</property>
<child>
<object class="GtkFrame">
- <property name="visible">True</property>
- <property name="shadow_type">in</property>
<style>
<class name="expander-frame"/>
</style>
<child>
<object class="GtkBox">
- <property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkTextView" id="errorView">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
<property name="monospace">True</property>
<property name="editable">False</property>
<property name="wrap_mode">word</property>
@@ -116,63 +93,34 @@
</object>
</child>
<child>
- <object class="GtkToolbar">
- <property name="visible">True</property>
+ <object class="GtkBox">
<style>
<class name="expander-toolbar"/>
</style>
<child>
- <object class="GtkToolItem">
- <property name="visible">True</property>
- <child>
- <object class="GtkButton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="action_name">win.copy-error</property>
- <style>
- <class name="flat"/>
- <class name="image-button"/>
- </style>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon_name">edit-copy-symbolic</property>
- </object>
- </child>
- </object>
- </child>
+ <object class="GtkButton">
+ <property name="receives_default">True</property>
+ <property name="action_name">win.copy-error</property>
+ <property name="has-frame">False</property>
+ <property name="icon-name">edit-copy-symbolic</property>
</object>
</child>
<child>
- <object class="GtkSeparatorToolItem">
- <property name="visible">True</property>
- <property name="draw">False</property>
+ <object class="GtkLabel">
+ <property name="hexpand">True</property>
</object>
- <packing>
- <property name="expand">True</property>
- </packing>
</child>
<child>
- <object class="GtkToolItem">
- <property name="visible">True</property>
- <child>
- <object class="GtkButton" id="homeButton">
- <property name="visible"
- bind-source="homeButton"
- bind-property="sensitive"
- bind-flags="sync-create"/>
- <property name="label" translatable="yes">Homepage</property>
- <property name="tooltip_text" translatable="yes">Visit
extension homepage</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="no_show_all">True</property>
- <property name="action_name">win.show-url</property>
- <style>
- <class name="flat"/>
- </style>
- </object>
- </child>
+ <object class="GtkButton" id="homeButton">
+ <property name="visible"
+ bind-source="homeButton"
+ bind-property="sensitive"
+ bind-flags="sync-create"/>
+ <property name="label" translatable="yes">Homepage</property>
+ <property name="tooltip_text" translatable="yes">Visit extension
homepage</property>
+ <property name="receives_default">True</property>
+ <property name="has-frame">False</property>
+ <property name="action_name">win.show-url</property>
</object>
</child>
</object>
diff --git a/subprojects/extensions-app/data/ui/extension-row.ui
b/subprojects/extensions-app/data/ui/extension-row.ui
index e1fd430289..9f7d77261d 100644
--- a/subprojects/extensions-app/data/ui/extension-row.ui
+++ b/subprojects/extensions-app/data/ui/extension-row.ui
@@ -1,23 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.0 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<template class="ExtensionRow" parent="GtkListBoxRow">
- <property name="visible">True</property>
<property name="activatable">False</property>
<child>
<object class="GtkGrid">
- <property name="visible">True</property>
- <property name="margin">12</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin-top">12</property>
+ <property name="margin-bottom">12</property>
<property name="column_spacing">12</property>
<child>
- <object class="GtkLabel" id="nameLabel">
- <property name="visible">True</property>
- </object>
+ <object class="GtkLabel" id="nameLabel"/>
</child>
<child>
<object class="GtkImage" id="errorIcon">
- <property name="no_show_all">True</property>
+ <property name="visible">False</property>
<property name="icon_name">dialog-error-symbolic</property>
<style>
<class name="error"/>>
@@ -26,86 +24,61 @@
</child>
<child>
<object class="GtkImage" id="updatesIcon">
- <property name="no_show_all">True</property>
+ <property name="visible">False</property>
<property name="icon_name">software-update-available-symbolic</property>
<style>
- <class name="warning"/>>
+ <class name="warning"/>
</style>
</object>
</child>
<child>
<object class="GtkLabel">
- <property name="visible">True</property>
<property name="hexpand">True</property>
</object>
</child>
<child>
<object class="GtkButton" id="prefsButton">
- <property name="no_show_all">True</property>
- <property name="visible"
- bind-source="prefsButton"
+ <property name="visible" bind-source="prefsButton"
bind-property="sensitive"
bind-flags="sync-create"/>
- <property name="can_focus">True</property>
+ <property name="icon_name">emblem-system-symbolic</property>
<property name="receives_default">True</property>
<property name="valign">center</property>
<property name="action-name">row.show-prefs</property>
<style>
- <class name="circular"/>>
- <class name="image-button"/>>
+ <class name="circular"/>
</style>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon_name">emblem-system-symbolic</property>
- </object>
- </child>
</object>
</child>
<child>
<object class="GtkSwitch" id="switch">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
<property name="valign">center</property>
<property name="action-name">row.enabled</property>
</object>
</child>
<child>
- <object class="GtkSeparator">
- <property name="visible">True</property>
- </object>
+ <object class="GtkSeparator"/>
</child>
- <child>
+ <child>
<object class="GtkButton" id="revealButton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="valign">center</property>
+ <property name="has-frame">False</property>
+ <property name="icon_name">pan-end-symbolic</property>
<style>
<class name="details-button"/>
- <class name="image-button"/>
- <class name="flat"/>
</style>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon_name">pan-end-symbolic</property>
- </object>
- </child>
</object>
</child>
<child>
<object class="GtkRevealer" id="revealer">
- <property name="visible">True</property>
<child>
<object class="GtkGrid">
- <property name="visible">True</property>
<property name="margin_top">12</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<child>
<object class="GtkLabel">
- <property name="visible">True</property>
<property name="label" translatable="yes">Description</property>
<property name="xalign">0</property>
<style>
@@ -115,7 +88,6 @@
</child>
<child>
<object class="GtkLabel" id="descriptionLabel">
- <property name="visible">True</property>
<property name="ellipsize">end</property>
<property name="max_width_chars">60</property>
<property name="xalign">0</property>
@@ -128,27 +100,26 @@
bind-source="versionLabel"
bind-property="visible"
bind-flags="sync-create"/>
- <property name="no_show_all">True</property>
<property name="label" translatable="yes">Version</property>
<property name="xalign">0</property>
<style>
<class name="dim-label"/>
</style>
+ <layout>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </layout>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- </packing>
</child>
<child>
<object class="GtkLabel" id="versionLabel">
- <property name="no_show_all">True</property>
+ <property name="visible">False</property>
<property name="xalign">0</property>
+ <layout>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ </layout>
</object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- </packing>
</child>
<child>
<object class="GtkLabel">
@@ -156,27 +127,26 @@
bind-source="authorLabel"
bind-property="visible"
bind-flags="sync-create"/>
- <property name="no_show_all">True</property>
<property name="label" translatable="yes">Author</property>
<property name="xalign">0</property>
<style>
<class name="dim-label"/>
</style>
+ <layout>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ </layout>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- </packing>
</child>
<child>
<object class="GtkLabel" id="authorLabel">
- <property name="no_show_all">True</property>
+ <property name="visible">False</property>
<property name="xalign">0</property>
+ <layout>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ </layout>
</object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- </packing>
</child>
<child>
<object class="GtkLabel">
@@ -184,44 +154,42 @@
bind-source="errorLabel"
bind-property="visible"
bind-flags="sync-create"/>
- <property name="no_show_all">True</property>
<property name="label" translatable="yes">Error</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<style>
<class name="dim-label"/>
</style>
+ <layout>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ </layout>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">3</property>
- </packing>
</child>
<child>
<object class="GtkLabel" id="errorLabel">
- <property name="no_show_all">True</property>
+ <property name="visible">False</property>
<property name="selectable">True</property>
<property name="wrap">True</property>
<property name="max_width_chars">60</property>
<property name="xalign">0</property>
+ <layout>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ </layout>
</object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">3</property>
- </packing>
</child>
<child>
<object class="GtkButton">
- <property name="visible">True</property>
<property name="label" translatable="yes">Website</property>
<property name="action_name">row.show-url</property>
<property name="valign">end</property>
<property name="margin-top">12</property>
+ <layout>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ </layout>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">4</property>
- </packing>
</child>
<child>
<object class="GtkButton" id="removeButton">
@@ -229,7 +197,6 @@
bind-source="removeButton"
bind-property="sensitive"
bind-flags="sync-create"/>
- <property name="no_show_all">True</property>
<property name="label" translatable="yes">Remove…</property>
<property name="action_name">row.uninstall</property>
<property name="hexpand">True</property>
@@ -238,20 +205,20 @@
<style>
<class name="destructive-action"/>
</style>
+ <layout>
+ <property name="left_attach">1</property>
+ <property name="top_attach">4</property>
+ </layout>
</object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">4</property>
- </packing>
</child>
</object>
</child>
+ <layout>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="column-span">8</property>
+ </layout>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">8</property>
- </packing>
</child>
</object>
</child>
diff --git a/subprojects/extensions-app/data/ui/extensions-window.ui
b/subprojects/extensions-app/data/ui/extensions-window.ui
index dd36924484..f9cd988ce0 100644
--- a/subprojects/extensions-app/data/ui/extensions-window.ui
+++ b/subprojects/extensions-app/data/ui/extensions-window.ui
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.0 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<menu id="primary-menu">
@@ -17,13 +16,14 @@
<object class="GtkPopover" id="infoPopover">
<child>
<object class="GtkBox">
- <property name="visible">True</property>
<property name="orientation">vertical</property>
- <property name="margin">12</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin-top">12</property>
+ <property name="margin-bottom">12</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel">
- <property name="visible">True</property>
<property name="label" translatable="yes">To find and add extensions, visit <a
href="https://extensions.gnome.org">extensions.gnome.org</a>.</property>
<property name="use_markup">True</property>
<property name="xalign">0</property>
@@ -31,7 +31,6 @@
</child>
<child>
<object class="GtkLabel">
- <property name="visible">True</property>
<property name="label" translatable="yes">Warning</property>
<property name="xalign">0</property>
<property name="margin_top">6</property>
@@ -42,7 +41,6 @@
</child>
<child>
<object class="GtkLabel">
- <property name="visible">True</property>
<property name="label" translatable="yes">Extensions can cause system issues, including
performance problems. If you encounter problems with your system, it is recommended to disable all
extensions.</property>
<property name="wrap">True</property>
<property name="max_width_chars">40</property>
@@ -55,207 +53,190 @@
<template class="ExtensionsWindow" parent="GtkApplicationWindow">
<property name="default_width">800</property>
<property name="default_height">500</property>
+ <property name="title" translatable="yes">Extensions</property>
<child type="titlebar">
<object class="GtkHeaderBar">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Extensions</property>
- <property name="show_close_button">True</property>
+ <property name="show-title-buttons">True</property>
<child>
<object class="GtkMenuButton">
- <property name="visible">True</property>
<property name="popover">infoPopover</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon_name">dialog-information-symbolic</property>
- </object>
- </child>
+ <property name="icon_name">dialog-information-symbolic</property>
</object>
</child>
- <child>
+ <child type="end">
<object class="GtkMenuButton" id="menuButton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="menu_model">primary-menu</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon_name">open-menu-symbolic</property>
- </object>
- </child>
+ <property name="icon_name">open-menu-symbolic</property>
</object>
- <packing>
- <property name="pack_type">end</property>
- </packing>
</child>
- <child>
+ <child type="end">
<object class="GtkSwitch">
- <property name="visible">True</property>
<property name="action-name">win.user-extensions-enabled</property>
<property name="valign">center</property>
</object>
- <packing>
- <property name="pack_type">end</property>
- </packing>
</child>
</object>
</child>
<child>
<object class="GtkBox">
- <property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkStack" id="mainStack">
- <property name="visible">True</property>
<property name="transition_type">crossfade</property>
<property name="vexpand">True</property>
<child>
- <object class="GtkScrolledWindow" id="scrolledWindow">
- <property name="visible">True</property>
- <property name="hscrollbar_policy">never</property>
- <child>
- <object class="GtkViewport">
- <property name="visible">True</property>
+ <object class="GtkStackPage">
+ <property name="name">main</property>
+ <property name="child">
+ <object class="GtkScrolledWindow" id="scrolledWindow">
+ <property name="hscrollbar_policy">never</property>
<child>
- <object class="GtkBox" id="mainBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="halign">center</property>
- <property name="margin">36</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel">
- <property name="visible"
- bind-source="userList"
- bind-property="visible"
- bind-flags="sync-create"/>
- <property name="halign">start</property>
- <property name="hexpand">True</property>
- <property name="label" translatable="yes">Manually Installed</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkListBox" id="userList">
- <property name="visible">True</property>
- <property name="selection_mode">none</property>
- <property name="margin_bottom">24</property>
- <style>
- <class name="frame"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible"
- bind-source="systemList"
- bind-property="visible"
- bind-flags="sync-create"/>
- <property name="halign">start</property>
- <property name="hexpand">True</property>
- <property name="label" translatable="yes">Built-In</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
+ <object class="GtkViewport">
+ <property name="scroll-to-focus">True</property>
<child>
- <object class="GtkListBox" id="systemList">
- <property name="visible">True</property>
- <property name="selection_mode">none</property>
- <style>
- <class name="frame"/>
- </style>
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="halign">center</property>
+ <property name="margin-start">36</property>
+ <property name="margin-end">36</property>
+ <property name="margin-top">36</property>
+ <property name="margin-bottom">36</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible"
+ bind-source="userList"
+ bind-property="visible"
+ bind-flags="sync-create"/>
+ <property name="halign">start</property>
+ <property name="hexpand">True</property>
+ <property name="label" translatable="yes">Manually Installed</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBox" id="userList">
+ <property name="selection_mode">none</property>
+ <property name="show_separators">True</property>
+ <property name="margin_bottom">24</property>
+ <style>
+ <class name="frame"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible"
+ bind-source="systemList"
+ bind-property="visible"
+ bind-flags="sync-create"/>
+ <property name="halign">start</property>
+ <property name="hexpand">True</property>
+ <property name="label" translatable="yes">Built-In</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBox" id="systemList">
+ <property name="selection_mode">none</property>
+ <property name="show_separators">True</property>
+ <style>
+ <class name="frame"/>
+ </style>
+ </object>
+ </child>
</object>
</child>
</object>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">main</property>
- </packing>
</child>
<child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="margin">32</property>
- <property name="spacing">6</property>
- <property name="valign">center</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="pixel_size">96</property>
- <property name="icon_name">org.gnome.Extensions-symbolic</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">No Installed Extensions</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- <attribute name="scale" value="1.44"/>
- </attributes>
+ <object class="GtkStackPage">
+ <property name="name">placeholder</property>
+ <property name="child">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="margin-start">32</property>
+ <property name="margin-end">32</property>
+ <property name="margin-top">32</property>
+ <property name="margin-bottom">32</property>
+ <property name="spacing">6</property>
+ <property name="valign">center</property>
+ <child>
+ <object class="GtkImage">
+ <property name="pixel_size">96</property>
+ <property name="icon_name">org.gnome.Extensions-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">No Installed Extensions</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.44"/>
+ </attributes>
+ </object>
+ </child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">placeholder</property>
- </packing>
</child>
<child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="margin_left">100</property>
- <property name="margin_right">100</property>
- <property name="margin_top">100</property>
- <property name="margin_bottom">60</property>
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Something’s gone wrong</property>
- <attributes>
- <attribute name="scale" value="1.44"/>
- </attributes>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">We’re very sorry, but it was not possible to
get the list of installed extensions. Make sure you are logged into GNOME and try again.</property>
- <property name="justify">center</property>
- <property name="wrap">True</property>
- <style>
- <class name="dim-label"/>
- </style>
+ <object class="GtkStackPage">
+ <property name="name">noshell</property>
+ <property name="child">
+ <object class="GtkBox">
+ <property name="margin-start">100</property>
+ <property name="margin-end">100</property>
+ <property name="margin_top">100</property>
+ <property name="margin_bottom">60</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">Something’s gone wrong</property>
+ <attributes>
+ <attribute name="scale" value="1.44"/>
+ </attributes>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">We’re very sorry, but it was not possible
to get the list of installed extensions. Make sure you are logged into GNOME and try again.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">noshell</property>
- </packing>
</child>
</object>
</child>
<child>
<object class="GtkActionBar" id="updatesBar">
- <property name="no_show_all">True</property>
+ <property name="revealed">False</property>
<child>
<object class="GtkImage">
- <property name="visible">True</property>
<property name="pixel-size">24</property>
- <property name="margin">6</property>
+ <property name="margin-start">6</property>
+ <property name="margin-end">6</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
<property name="icon_name">software-update-available-symbolic</property>
<style>
<class name="warning"/>
@@ -264,11 +245,9 @@
</child>
<child>
<object class="GtkBox">
- <property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
- <property name="visible">True</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Extension Updates Ready</property>
<attributes>
@@ -278,16 +257,14 @@
</child>
<child>
<object class="GtkLabel" id="updatesLabel">
- <property name="visible">True</property>
<property name="halign">start</property>
</object>
</child>
</object>
</child>
- <child>
+ <child type="end">
<object class="GtkButton">
<property name="label" translatable="yes">Log Out…</property>
- <property name="visible">True</property>
<property name="valign">center</property>
<property name="action-name">win.logout</property>
<property name="receives_default">True</property>
@@ -295,9 +272,6 @@
<class name="suggested-action"/>
</style>
</object>
- <packing>
- <property name="pack_type">end</property>
- </packing>
</child>
</object>
</child>
diff --git a/subprojects/extensions-app/js/main.js b/subprojects/extensions-app/js/main.js
index aae5b9bfad..10bc7fbcc6 100644
--- a/subprojects/extensions-app/js/main.js
+++ b/subprojects/extensions-app/js/main.js
@@ -1,6 +1,6 @@
/* exported main */
-imports.gi.versions.Gdk = '3.0';
-imports.gi.versions.Gtk = '3.0';
+imports.gi.versions.Gdk = '4.0';
+imports.gi.versions.Gtk = '4.0';
const Gettext = imports.gettext;
const Package = imports.package;
@@ -63,7 +63,7 @@ class Application extends Gtk.Application {
} catch (e) {
logError(e, 'Failed to add application style');
}
- Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),
+ Gtk.StyleContext.add_provider_for_display(Gdk.Display.get_default(),
provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
@@ -80,7 +80,6 @@ var ExtensionsWindow = GObject.registerClass({
InternalChildren: [
'userList',
'systemList',
- 'mainBox',
'mainStack',
'scrolledWindow',
'updatesBar',
@@ -95,8 +94,6 @@ var ExtensionsWindow = GObject.registerClass({
this._exporter = new Shew.WindowExporter({ window: this });
this._exportedHandle = '';
- this._mainBox.set_focus_vadjustment(this._scrolledWindow.vadjustment);
-
let action;
action = new Gio.SimpleAction({ name: 'show-about' });
action.connect('activate', this._showAbout.bind(this));
@@ -117,10 +114,7 @@ var ExtensionsWindow = GObject.registerClass({
this.add_action(action);
this._userList.set_sort_func(this._sortList.bind(this));
- this._userList.set_header_func(this._updateHeader.bind(this));
-
this._systemList.set_sort_func(this._sortList.bind(this));
- this._systemList.set_header_func(this._updateHeader.bind(this));
this._shellProxy.connectSignal('ExtensionStateChanged',
this._onExtensionStateChanged.bind(this));
@@ -209,18 +203,10 @@ var ExtensionsWindow = GObject.registerClass({
return row1.name.localeCompare(row2.name);
}
- _updateHeader(row, before) {
- if (!before || row.get_header())
- return;
-
- let sep = new Gtk.Separator({ orientation: Gtk.Orientation.HORIZONTAL });
- row.set_header(sep);
- }
-
_findExtensionRow(uuid) {
return [
- ...this._userList.get_children(),
- ...this._systemList.get_children(),
+ ...this._userList,
+ ...this._systemList,
].find(c => c.uuid === uuid);
}
@@ -240,13 +226,13 @@ var ExtensionsWindow = GObject.registerClass({
// and reset the variable to null so that we create a new row
// below and add it to the appropriate list
if (row && row.type !== extension.type) {
- row.destroy();
+ row.get_parent().remove(row);
row = null;
}
if (row) {
if (extension.state === ExtensionState.UNINSTALLED)
- row.destroy();
+ row.get_parent().remove(row);
} else {
this._addExtensionRow(extension);
}
@@ -276,12 +262,11 @@ var ExtensionsWindow = GObject.registerClass({
_addExtensionRow(extension) {
let row = new ExtensionRow(extension);
- row.show_all();
if (row.type === ExtensionType.PER_USER)
- this._userList.add(row);
+ this._userList.insert(row, -1);
else
- this._systemList.add(row);
+ this._systemList.insert(row, -1);
}
_queueUpdatesCheck() {
@@ -298,8 +283,8 @@ var ExtensionsWindow = GObject.registerClass({
}
_syncListVisibility() {
- this._userList.visible = this._userList.get_children().length > 0;
- this._systemList.visible = this._systemList.get_children().length > 0;
+ this._userList.visible = this._userList.get_first_child() !== null;
+ this._systemList.visible = this._systemList.get_first_child() !== null;
if (this._userList.visible || this._systemList.visible)
this._mainStack.visible_child_name = 'main';
@@ -308,13 +293,13 @@ var ExtensionsWindow = GObject.registerClass({
}
_checkUpdates() {
- let nUpdates = this._userList.get_children().filter(c => c.hasUpdate).length;
+ let nUpdates = [...this._userList].filter(c => c.hasUpdate).length;
this._updatesLabel.label = Gettext.ngettext(
'%d extension will be updated on next login.',
'%d extensions will be updated on next login.',
nUpdates).format(nUpdates);
- this._updatesBar.visible = nUpdates > 0;
+ this._updatesBar.revealed = nUpdates > 0;
}
_extensionsLoaded() {
@@ -354,7 +339,7 @@ var ExtensionRow = GObject.registerClass({
name: 'show-prefs',
enabled: this.hasPrefs,
});
- action.connect('activate', () => this.get_toplevel().openPrefs(this.uuid));
+ action.connect('activate', () => this.get_root().openPrefs(this.uuid));
this._actionGroup.add_action(action);
action = new Gio.SimpleAction({
@@ -371,7 +356,7 @@ var ExtensionRow = GObject.registerClass({
name: 'uninstall',
enabled: this.type === ExtensionType.PER_USER,
});
- action.connect('activate', () => this.get_toplevel().uninstall(this.uuid));
+ action.connect('activate', () => this.get_root().uninstall(this.uuid));
this._actionGroup.add_action(action);
action = new Gio.SimpleAction({
diff --git a/subprojects/shew/meson.build b/subprojects/shew/meson.build
index 7dadab5bce..5411d145d7 100644
--- a/subprojects/shew/meson.build
+++ b/subprojects/shew/meson.build
@@ -22,6 +22,7 @@ pkglibdir = join_paths(get_option('libdir'), package_name)
girdir = join_paths(pkgdatadir, 'gir-1.0')
typelibdir = join_paths(pkglibdir, 'girepository-1.0')
-gtk_dep = dependency('gtk+-3.0')
+gtk_dep = dependency('gtk4')
+x11_dep = dependency('x11', required: false)
subdir('src')
diff --git a/subprojects/shew/src/meson.build b/subprojects/shew/src/meson.build
index c3b1a6b796..e590a46129 100644
--- a/subprojects/shew/src/meson.build
+++ b/subprojects/shew/src/meson.build
@@ -12,7 +12,7 @@ shew_sources = [
libshew = library(full_name,
sources: shew_sources,
- dependencies: [gtk_dep],
+ dependencies: [gtk_dep, x11_dep],
install_dir: pkglibdir,
install: true,
)
@@ -21,7 +21,7 @@ libshew_gir = gnome.generate_gir(libshew,
sources: shew_sources + shew_public_headers,
nsversion: api_version,
namespace: 'Shew',
- includes: ['Gdk-3.0', 'Gtk-3.0'],
+ includes: ['Gdk-4.0', 'Gtk-4.0'],
extra_args: ['--quiet'],
install_dir_gir: girdir,
install_dir_typelib: typelibdir,
diff --git a/subprojects/shew/src/shew-external-window-wayland.c
b/subprojects/shew/src/shew-external-window-wayland.c
index 82989761f7..db2ea6d002 100644
--- a/subprojects/shew/src/shew-external-window-wayland.c
+++ b/subprojects/shew/src/shew-external-window-wayland.c
@@ -21,7 +21,7 @@
#include <gdk/gdk.h>
#ifdef GDK_WINDOWING_WAYLAND
-#include <gdk/gdkwayland.h>
+#include <gdk/wayland/gdkwayland.h>
#endif
#include "shew-external-window-wayland.h"
@@ -77,14 +77,14 @@ shew_external_window_wayland_new (const char *handle_str)
static void
shew_external_window_wayland_set_parent_of (ShewExternalWindow *external_window,
- GdkWindow *child_window)
+ GdkSurface *child_surface)
{
ShewExternalWindowWayland *external_window_wayland =
SHEW_EXTERNAL_WINDOW_WAYLAND (external_window);
char *handle_str = external_window_wayland->handle_str;
#ifdef GDK_WINDOWING_WAYLAND
- if (!gdk_wayland_window_set_transient_for_exported (child_window, handle_str))
+ if (!gdk_wayland_surface_set_transient_for_exported (GDK_WAYLAND_SURFACE (child_surface), handle_str))
g_warning ("Failed to set portal window transient for external parent");
#endif
}
diff --git a/subprojects/shew/src/shew-external-window-x11.c b/subprojects/shew/src/shew-external-window-x11.c
index 5c4c8e69e8..408e564588 100644
--- a/subprojects/shew/src/shew-external-window-x11.c
+++ b/subprojects/shew/src/shew-external-window-x11.c
@@ -21,7 +21,8 @@
#include <errno.h>
#include <gdk/gdk.h>
#ifdef GDK_WINDOWING_X11
-#include <gdk/gdkx.h>
+#include <gdk/x11/gdkx.h>
+#include <X11/Xlib.h>
#endif
#include <stdlib.h>
@@ -33,7 +34,7 @@ struct _ShewExternalWindowX11
{
ShewExternalWindow parent;
- GdkWindow *foreign_gdk_window;
+ int foreign_xid;
};
G_DEFINE_TYPE (ShewExternalWindowX11, shew_external_window_x11,
@@ -54,13 +55,29 @@ get_x11_display (void)
return x11_display;
}
+static gboolean
+check_foreign_xid (GdkDisplay *display,
+ int xid)
+{
+ gboolean result = FALSE;
+#ifdef GDK_WINDOWING_X11
+ XWindowAttributes attrs;
+
+ gdk_x11_display_error_trap_push (display);
+ result = XGetWindowAttributes (GDK_DISPLAY_XDISPLAY (display), xid, &attrs);
+ if (gdk_x11_display_error_trap_pop (display) || !result)
+ return FALSE;
+
+#endif
+ return result;
+}
+
ShewExternalWindowX11 *
shew_external_window_x11_new (const char *handle_str)
{
ShewExternalWindowX11 *external_window_x11;
GdkDisplay *display;
int xid;
- GdkWindow *foreign_gdk_window = NULL;
display = get_x11_display ();
if (!display)
@@ -77,43 +94,32 @@ shew_external_window_x11_new (const char *handle_str)
return NULL;
}
-#ifdef GDK_WINDOWING_X11
- foreign_gdk_window = gdk_x11_window_foreign_new_for_display (display, xid);
-#endif
-
- if (!foreign_gdk_window)
+ if (!check_foreign_xid (display, xid))
{
- g_warning ("Failed to create foreign window for XID %d", xid);
+ g_warning ("Failed to find foreign window for XID %d", xid);
return NULL;
}
external_window_x11 = g_object_new (SHEW_TYPE_EXTERNAL_WINDOW_X11,
"display", display,
NULL);
- external_window_x11->foreign_gdk_window = foreign_gdk_window;
+ external_window_x11->foreign_xid = xid;
return external_window_x11;
}
static void
shew_external_window_x11_set_parent_of (ShewExternalWindow *external_window,
- GdkWindow *child_window)
+ GdkSurface *child_surface)
{
ShewExternalWindowX11 *external_window_x11 =
SHEW_EXTERNAL_WINDOW_X11 (external_window);
- gdk_window_set_transient_for (child_window,
- external_window_x11->foreign_gdk_window);
-}
-
-static void
-shew_external_window_x11_dispose (GObject *object)
-{
- ShewExternalWindowX11 *external_window_x11 = SHEW_EXTERNAL_WINDOW_X11 (object);
-
- g_clear_object (&external_window_x11->foreign_gdk_window);
-
- G_OBJECT_CLASS (shew_external_window_x11_parent_class)->dispose (object);
+#ifdef GDK_WINDOWING_X11
+ XSetTransientForHint (GDK_SURFACE_XDISPLAY (child_surface),
+ GDK_SURFACE_XID (child_surface),
+ external_window_x11->foreign_xid);
+#endif
}
static void
@@ -124,10 +130,7 @@ shew_external_window_x11_init (ShewExternalWindowX11 *external_window_x11)
static void
shew_external_window_x11_class_init (ShewExternalWindowX11Class *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
ShewExternalWindowClass *external_window_class = SHEW_EXTERNAL_WINDOW_CLASS (klass);
- object_class->dispose = shew_external_window_x11_dispose;
-
external_window_class->set_parent_of = shew_external_window_x11_set_parent_of;
}
diff --git a/subprojects/shew/src/shew-external-window.c b/subprojects/shew/src/shew-external-window.c
index f468346459..118d93fa40 100644
--- a/subprojects/shew/src/shew-external-window.c
+++ b/subprojects/shew/src/shew-external-window.c
@@ -75,10 +75,10 @@ shew_external_window_new_from_handle (const char *handle_str)
void
shew_external_window_set_parent_of (ShewExternalWindow *external_window,
- GdkWindow *child_window)
+ GdkSurface *child_surface)
{
SHEW_EXTERNAL_WINDOW_GET_CLASS (external_window)->set_parent_of (external_window,
- child_window);
+ child_surface);
}
/**
diff --git a/subprojects/shew/src/shew-external-window.h b/subprojects/shew/src/shew-external-window.h
index 105a8493be..ca6671b581 100644
--- a/subprojects/shew/src/shew-external-window.h
+++ b/subprojects/shew/src/shew-external-window.h
@@ -32,12 +32,12 @@ struct _ShewExternalWindowClass
GObjectClass parent_class;
void (*set_parent_of) (ShewExternalWindow *external_window,
- GdkWindow *child_window);
+ GdkSurface *child_surface);
};
ShewExternalWindow *shew_external_window_new_from_handle (const char *handle_str);
void shew_external_window_set_parent_of (ShewExternalWindow *external_window,
- GdkWindow *child_window);
+ GdkSurface *child_surface);
GdkDisplay *shew_external_window_get_display (ShewExternalWindow *external_window);
diff --git a/subprojects/shew/src/shew-window-exporter.c b/subprojects/shew/src/shew-window-exporter.c
index f9506823f0..4173285b4d 100644
--- a/subprojects/shew/src/shew-window-exporter.c
+++ b/subprojects/shew/src/shew-window-exporter.c
@@ -21,10 +21,10 @@
#include "shew-window-exporter.h"
#ifdef GDK_WINDOWING_X11
-#include <gdk/gdkx.h>
+#include <gdk/x11/gdkx.h>
#endif
#ifdef GDK_WINDOWING_WAYLAND
-#include <gdk/gdkwayland.h>
+#include <gdk/wayland/gdkwayland.h>
#endif
struct _ShewWindowExporter
@@ -53,7 +53,7 @@ shew_window_exporter_new (GtkWindow *window)
#ifdef GDK_WINDOWING_WAYLAND
static void
-wayland_window_exported (GdkWindow *window,
+wayland_window_exported (GdkSurface *surface,
const char *handle,
gpointer user_data)
{
@@ -90,8 +90,8 @@ shew_window_exporter_export (ShewWindowExporter *exporter,
#ifdef GDK_WINDOWING_X11
if (GDK_IS_X11_DISPLAY (gtk_widget_get_display (widget)))
{
- GdkWindow *w = gtk_widget_get_window (widget);
- guint32 xid = (guint32) gdk_x11_window_get_xid (w);
+ GdkSurface *s = gtk_native_get_surface (GTK_NATIVE (widget));
+ guint32 xid = (guint32) gdk_x11_surface_get_xid (s);
g_task_return_pointer (task, g_strdup_printf ("x11:%x", xid), g_free);
}
@@ -100,9 +100,9 @@ shew_window_exporter_export (ShewWindowExporter *exporter,
#ifdef GDK_WINDOWING_WAYLAND
if (GDK_IS_WAYLAND_DISPLAY (gtk_widget_get_display (widget)))
{
- GdkWindow *w = gtk_widget_get_window (widget);
- gdk_wayland_window_export_handle (w, wayland_window_exported,
- g_steal_pointer (&task), NULL);
+ GdkSurface *s = gtk_native_get_surface (GTK_NATIVE (widget));
+ gdk_wayland_surface_export_handle (s, wayland_window_exported,
+ g_steal_pointer (&task), NULL);
}
#endif
@@ -136,8 +136,8 @@ shew_window_exporter_unexport (ShewWindowExporter *exporter)
#ifdef GDK_WINDOWING_WAYLAND
if (GDK_IS_WAYLAND_DISPLAY (gtk_widget_get_display (widget)))
{
- GdkWindow *w = gtk_widget_get_window (widget);
- gdk_wayland_window_unexport_handle (w);
+ GdkSurface *s = gtk_native_get_surface (GTK_NATIVE (widget));
+ gdk_wayland_surface_unexport_handle (s);
}
#endif
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]