Skip to content

Commit 49ca6f3

Browse files
authored
Port to Gtk4 (#2540)
1 parent d8b1e4a commit 49ca6f3

File tree

9 files changed

+95
-27
lines changed

9 files changed

+95
-27
lines changed

.github/workflows/main.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
- name: Install Dependencies
3232
run: |
3333
apt update
34-
apt install -y gettext gsettings-desktop-schemas-dev libatk-bridge2.0-dev libclutter-1.0-dev libgee-0.8-dev libglib2.0-dev libgnome-desktop-3-dev libgranite-dev libgtk-3-dev ${{ matrix.mutter_pkg }} libsqlite3-dev meson valac valadoc
34+
apt install -y gettext gsettings-desktop-schemas-dev libatk-bridge2.0-dev libclutter-1.0-dev libgee-0.8-dev libglib2.0-dev libgnome-desktop-4-dev libgnome-bg-4-dev libgranite-dev libgtk-3-dev ${{ matrix.mutter_pkg }} libsqlite3-dev meson valac valadoc
3535
- name: Build
3636
env:
3737
DESTDIR: out
@@ -69,7 +69,7 @@ jobs:
6969
run: |
7070
zypper addrepo https://download.opensuse.org/repositories/X11:Pantheon/15.6/X11:Pantheon.repo
7171
zypper --gpg-auto-import-keys refresh
72-
zypper --non-interactive install tar git desktop-file-utils gsettings-desktop-schemas-devel libatk-1_0-0 clutter-devel libgee-devel glib2-devel libgnome-desktop-3-devel granite6-devel granite-devel gtk3-devel gtk4-devel libhandy-devel mutter-devel sqlite3-devel meson vala valadoc gcc
72+
zypper --non-interactive install tar git desktop-file-utils gsettings-desktop-schemas-devel libatk-1_0-0 clutter-devel libgee-devel glib2-devel libgnome-desktop-4-devel granite6-devel granite-devel gtk3-devel gtk4-devel libhandy-devel mutter-devel sqlite3-devel meson vala valadoc gcc
7373
- uses: actions/checkout@v5
7474
- name: Build
7575
env:

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@ You'll need the following dependencies:
1111
* libclutter-1.0-dev (>= 1.12.0)
1212
* libgee-0.8-dev
1313
* libglib2.0-dev (>= 2.74)
14-
* libgnome-desktop-3-dev
14+
* libgnome-desktop-4-dev
15+
* libgnome-bg-4-dev
1516
* libgranite-dev (>= 5.4.0)
16-
* libgtk-3-dev (>= 3.10.0)
17+
* libgranite-7-dev
18+
* libgtk-3-dev
19+
* libgtk-4-dev
1720
* libmutter-10-dev (>= 42.0) | libmutter-dev (>= 3.18.3)
1821
* meson (>= 0.59.0)
1922
* valac (>= 0.46.0)

docs/meson.build

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ basic_command = [
1010
'--package-name','gala',
1111
'--package-version', meson.project_version(),
1212
mutter_packages_command,
13-
'--pkg', 'gtk+-3.0',
13+
'--pkg', 'gtk4',
1414
'--pkg', 'gee-0.8',
1515
'--pkg', 'gio-unix-2.0',
1616
'--pkg', 'gmodule-2.0',
@@ -41,10 +41,9 @@ all_doc_target = custom_target(
4141
'--internal',
4242
'--pkg', 'sqlite3',
4343
'--pkg', 'atk-bridge-2.0',
44-
'--pkg', 'gnome-desktop-3.0',
44+
'--pkg', 'gnome-bg-4',
45+
'--pkg', 'gnome-desktop-4',
4546
'--pkg', 'libsystemd',
46-
'--pkg', 'gnome-desktop-3.0',
47-
'--pkg', 'gmodule-2.0',
4847
'--pkg', 'wayland-server',
4948
'--pkg', 'pantheon-desktop-shell',
5049
'--vapidir=' + join_paths(meson.global_source_root(), 'protocol'),

lib/Drawing/Color.vala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ namespace Gala.Drawing {
1111
public class Color : GLib.Object {
1212
public const Gdk.RGBA LIGHT_BACKGROUND = { (250f / 255f), (250f / 255f), (250f / 255f), 1};
1313
public const Gdk.RGBA DARK_BACKGROUND = { (51 / 255f), (51 / 255f), (51 / 255f), 1};
14-
public const Gdk.RGBA LIGHT_BORDER = { 0, 0, 0, 0.2};
15-
public const Gdk.RGBA DARK_BORDER = { 0, 0, 0, 0.75};
14+
public const Gdk.RGBA LIGHT_BORDER = { 0, 0, 0, 0.2f};
15+
public const Gdk.RGBA DARK_BORDER = { 0, 0, 0, 0.75f};
1616
public const Gdk.RGBA LIGHT_HIGHLIGHT = { 255, 255, 255, 1};
17-
public const Gdk.RGBA DARK_HIGHLIGHT = { 255, 255, 255, 0.05};
17+
public const Gdk.RGBA DARK_HIGHLIGHT = { 255, 255, 255, 0.05f};
1818
public const Gdk.RGBA TOOLTIP_BACKGROUND = { 0, 0, 0, 1};
1919
public const Gdk.RGBA TOOLTIP_TEXT_COLOR = { 1, 1, 1, 1};
2020

lib/Drawing/StyleManager.vala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class Gala.Drawing.StyleManager : Object {
3131
private const string FDO_ACCOUNTS_NAME = "org.freedesktop.Accounts";
3232
private const string FDO_ACCOUNTS_PATH = "/org/freedesktop/Accounts";
3333

34-
private const double ACCENT_COLOR_ALPHA = 0.25;
34+
private const float ACCENT_COLOR_ALPHA = 0.25f;
3535
private const Gdk.RGBA DEFAULT_ACCENT_COLOR = { 0, 0, 0, ACCENT_COLOR_ALPHA };
3636

3737
private static GLib.Once<StyleManager> instance;
@@ -94,9 +94,9 @@ public class Gala.Drawing.StyleManager : Object {
9494
private void update_color (int color) {
9595
var rgb = get_color (color);
9696

97-
double r = ((rgb >> 16) & 255) / 255.0;
98-
double g = ((rgb >> 8) & 255) / 255.0;
99-
double b = (rgb & 255) / 255.0;
97+
var r = ((rgb >> 16) & 255) / 255.0f;
98+
var g = ((rgb >> 8) & 255) / 255.0f;
99+
var b = (rgb & 255) / 255.0f;
100100

101101
theme_accent_color = {
102102
r,

lib/Utils.vala

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ namespace Gala {
3434
private static Gtk.IconTheme icon_theme;
3535

3636
static construct {
37-
icon_theme = new Gtk.IconTheme ();
38-
icon_theme.set_custom_theme ("elementary");
37+
icon_theme = new Gtk.IconTheme () {
38+
theme_name = "elementary"
39+
};
40+
3941
icon_cache = new Gee.HashMultiMap<DesktopAppInfo, CachedIcon?> ();
4042
window_to_desktop_cache = new Gee.HashMap<Meta.Window, DesktopAppInfo> ();
4143
unknown_icon_cache = new Gee.ArrayList<CachedIcon?> ();
@@ -159,9 +161,19 @@ namespace Gala {
159161

160162
// Construct a new "application-default-icon" and store it in the cache
161163
try {
162-
var icon = icon_theme.load_icon_for_scale ("application-default-icon", icon_size, scale, 0);
163-
unknown_icon_cache.add (CachedIcon () { icon = icon, icon_size = icon_size, scale = scale });
164-
return icon;
164+
var icon_paintable = icon_theme.lookup_icon (
165+
"application-default-icon",
166+
null,
167+
icon_size,
168+
scale,
169+
Gtk.TextDirection.NONE,
170+
0
171+
);
172+
173+
var pixbuf = new Gdk.Pixbuf.from_file (icon_paintable.get_file ().get_path ());
174+
175+
unknown_icon_cache.add (CachedIcon () { icon = pixbuf, icon_size = icon_size, scale = scale });
176+
return pixbuf;
165177
} catch (Error e) {
166178
var icon = new Gdk.Pixbuf (Gdk.Colorspace.RGB, true, 8, icon_size * scale, icon_size * scale);
167179
icon.fill (0x00000000);
@@ -228,14 +240,19 @@ namespace Gala {
228240

229241
if (icon is GLib.ThemedIcon) {
230242
var icon_names = ((GLib.ThemedIcon)icon).get_names ();
231-
var icon_info = icon_theme.choose_icon_for_scale (icon_names, icon_size, scale, 0);
243+
if (icon_names.length == 0) {
244+
return null;
245+
}
246+
247+
var icon_paintable = icon_theme.lookup_icon (icon_names[0], icon_names[1:], icon_size, scale, NONE, 0);
232248

233-
if (icon_info == null) {
249+
var path = icon_paintable.get_file ()?.get_path ();
250+
if (path == null) {
234251
return null;
235252
}
236253

237254
try {
238-
var pixbuf = icon_info.load_icon ();
255+
var pixbuf = new Gdk.Pixbuf.from_file (path);
239256
icon_cache.@set (desktop, CachedIcon () { icon = pixbuf, icon_size = icon_size, scale = scale });
240257
return pixbuf;
241258
} catch (Error e) {

meson.build

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,16 @@ add_project_arguments([
5656
glib_version_required = '2.74.0'
5757

5858
atk_bridge_dep = dependency('atk-bridge-2.0')
59+
gdk_pixbuf_def = dependency ('gdk-pixbuf-2.0')
60+
gtk4_dep = dependency('gtk4')
5961
glib_dep = dependency('glib-2.0', version: '>= @0@'.format(glib_version_required))
6062
gobject_dep = dependency('gobject-2.0', version: '>= @0@'.format(glib_version_required))
6163
gio_dep = dependency('gio-2.0', version: '>= @0@'.format(glib_version_required))
6264
gio_unix_dep = dependency('gio-unix-2.0', version: '>= @0@'.format(glib_version_required))
6365
gmodule_dep = dependency('gmodule-2.0')
64-
gtk3_dep = dependency('gtk+-3.0')
6566
gee_dep = dependency('gee-0.8')
66-
gnome_desktop_dep = dependency('gnome-desktop-3.0')
67+
gnome_desktop_dep = dependency('gnome-desktop-4')
68+
gnome_bg_dep = dependency('gnome-bg-4')
6769
m_dep = cc.find_library('m', required: false)
6870
posix_dep = vala.find_library('posix', required: false)
6971
sqlite3_dep = dependency('sqlite3')
@@ -149,7 +151,7 @@ endif
149151
add_project_arguments(vala_flags, language: 'vala')
150152
add_project_link_arguments(['-Wl,-rpath,@0@'.format(mutter_typelib_dir)], language: 'c')
151153

152-
gala_base_dep = [atk_bridge_dep, glib_dep, gobject_dep, gio_dep, gio_unix_dep, gmodule_dep, gee_dep, gtk3_dep, mutter_dep, gnome_desktop_dep, m_dep, posix_dep, sqlite3_dep, xext_dep]
154+
gala_base_dep = [atk_bridge_dep, gdk_pixbuf_def, gtk4_dep, glib_dep, gobject_dep, gio_dep, gio_unix_dep, gmodule_dep, gee_dep, mutter_dep, gnome_desktop_dep, gnome_bg_dep, m_dep, posix_dep, sqlite3_dep, xext_dep]
153155

154156
if get_option('systemd')
155157
gala_base_dep += systemd_dep

src/Widgets/WindowSwitcher/WindowSwitcher.vala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
170170
highlight_color = Drawing.Color.DARK_HIGHLIGHT;
171171
}
172172

173-
background_color.alpha = 0.6;
173+
background_color.alpha = 0.6f;
174174

175175
#if HAS_MUTTER47
176176
caption.color = Cogl.Color.from_string (caption_color);

vapi/gnome-bg-4.vapi

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/* gnome-bg-4.vapi generated by vapigen, do not modify. */
2+
3+
[CCode (cprefix = "Gnome", gir_namespace = "GnomeBG", gir_version = "4.0", lower_case_cprefix = "gnome_")]
4+
namespace Gnome {
5+
[CCode (cheader_filename = "gnome-bg/gnome-bg.h", type_id = "gnome_bg_get_type ()")]
6+
public class BG : GLib.Object {
7+
[CCode (has_construct_function = false)]
8+
public BG ();
9+
public bool changes_with_time ();
10+
public Gdk.Pixbuf create_frame_thumbnail (Gnome.DesktopThumbnailFactory factory, Cairo.RectangleInt screen_area, int dest_width, int dest_height, int frame_num);
11+
public Cairo.Surface create_surface (Gdk.Surface window, int width, int height);
12+
public Gdk.Pixbuf create_thumbnail (Gnome.DesktopThumbnailFactory factory, Cairo.RectangleInt screen_area, int dest_width, int dest_height);
13+
public void draw (Gdk.Pixbuf dest);
14+
public unowned string get_filename ();
15+
public bool get_image_size (Gnome.DesktopThumbnailFactory factory, int best_width, int best_height, out int width, out int height);
16+
public GDesktop.BackgroundStyle get_placement ();
17+
public void get_rgba (out GDesktop.BackgroundShading type, out Gdk.RGBA primary, out Gdk.RGBA secondary);
18+
public bool has_multiple_sizes ();
19+
public bool is_dark (int dest_width, int dest_height);
20+
public void load_from_preferences (GLib.Settings settings);
21+
public void save_to_preferences (GLib.Settings settings);
22+
public void set_filename (string filename);
23+
public void set_placement (GDesktop.BackgroundStyle placement);
24+
public void set_rgba (GDesktop.BackgroundShading type, Gdk.RGBA primary, Gdk.RGBA secondary);
25+
public signal void changed ();
26+
public signal void transitioned ();
27+
}
28+
[CCode (cheader_filename = "gnome-bg/gnome-bg-slide-show.h", type_id = "gnome_bg_slide_show_get_type ()")]
29+
public class BGSlideShow : GLib.Object {
30+
[CCode (has_construct_function = false)]
31+
public BGSlideShow (string filename);
32+
public void get_current_slide (int width, int height, out double progress, out double duration, out bool is_fixed, out unowned string file1, out unowned string file2);
33+
public bool get_has_multiple_sizes ();
34+
public int get_num_slides ();
35+
public bool get_slide (int frame_number, int width, int height, out double progress, out double duration, out bool is_fixed, out unowned string file1, out unowned string file2);
36+
public double get_start_time ();
37+
public double get_total_duration ();
38+
public bool load () throws GLib.Error;
39+
public void load_async (GLib.Cancellable? cancellable, GLib.AsyncReadyCallback callback);
40+
[NoAccessorMethod]
41+
[Version (since = "3.34")]
42+
public GLib.File file { owned get; construct; }
43+
public bool has_multiple_sizes { get; }
44+
public double start_time { get; }
45+
public double total_duration { get; }
46+
}
47+
}

0 commit comments

Comments
 (0)