Skip to content

Commit

Permalink
Bump gtk version 0.15 -> 0.16 (#679)
Browse files Browse the repository at this point in the history
* Update to gtk 0.16

* chore: update libappindicator 0.7.1 -> 0.8.0

* chore: add changelog

* chore: format

Co-authored-by: Wu Yu Wei <wusyong9104@gmail.com>
  • Loading branch information
pewsheen and Wu Yu Wei committed Jan 26, 2023
1 parent ca1ed5d commit b59f1b4
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 49 deletions.
5 changes: 5 additions & 0 deletions .changes/bump-gtk-version.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"tao": minor
---

Bump gtk version: 0.15 -> 0.16
20 changes: 10 additions & 10 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -108,16 +108,16 @@ windows-implement = "0.39.0"
]

[target."cfg(any(target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies]
cairo-rs = "0.15"
gio = "0.15"
glib = "0.15"
glib-sys = "0.15"
gtk = { version = "0.15", features = [ "v3_22" ] }
gdk = { version = "0.15", features = [ "v3_22" ] }
gdk-sys = "0.15"
gdkx11-sys = "0.15"
gdk-pixbuf = { version = "0.15", features = [ "v2_36_8" ] }
libappindicator = { version = "0.7.1", optional = true }
cairo-rs = "0.16"
gio = "0.16"
glib = "0.16"
glib-sys = "0.16"
gtk = "0.16"
gdk = "0.16"
gdk-sys = "0.16"
gdkx11-sys = "0.16"
gdk-pixbuf = "0.16"
libappindicator = { version = "0.8.0", optional = true }
dirs-next = { version = "2.0.0", optional = true }
x11-dl = "2.20"
uuid = { version = "1.2", features = [ "v4" ] }
Expand Down
28 changes: 14 additions & 14 deletions src/platform_impl/linux/event_loop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,8 @@ impl<T> EventLoopWindowTarget<T> {

#[inline]
pub fn primary_monitor(&self) -> Option<RootMonitorHandle> {
let screen = self.display.default_screen();
#[allow(deprecated)] // Gtk3 Window only accepts Gdkscreen
let number = screen.primary_monitor();
let handle = MonitorHandle::new(&self.display, number);
let monitor = self.display.primary_monitor().unwrap();
let handle = MonitorHandle { monitor };
Some(RootMonitorHandle { inner: handle })
}

Expand Down Expand Up @@ -269,9 +267,16 @@ impl<T: 'static> EventLoop<T> {
Some(f) => {
if let Fullscreen::Borderless(m) = f {
if let Some(monitor) = m {
let number = monitor.inner.number;
let screen = window.display().default_screen();
window.fullscreen_on_monitor(&screen, number);
let display = window.display();
let monitor = monitor.inner;
let monitors = display.n_monitors();
for i in 0..monitors {
let m = display.monitor(i).unwrap();
if m == monitor.monitor {
let screen = display.default_screen();
window.fullscreen_on_monitor(&screen, i);
}
}
} else {
window.fullscreen();
}
Expand Down Expand Up @@ -361,19 +366,14 @@ impl<T: 'static> EventLoop<T> {
.default_seat()
.and_then(|seat| seat.pointer())
{
if let Some(screen) = window.screen() {
if let Some(screen) = GtkWindowExt::screen(&window) {
cursor.warp(&screen, x, y);
}
}
}
WindowRequest::CursorIgnoreEvents(ignore) => {
if ignore {
let empty_region = Region::create_rectangle(&RectangleInt {
x: 0,
y: 0,
width: 1,
height: 1,
});
let empty_region = Region::create_rectangle(&RectangleInt::new(0, 0, 1, 1));
window
.window()
.unwrap()
Expand Down
8 changes: 2 additions & 6 deletions src/platform_impl/linux/monitor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,13 @@ use crate::{

#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct MonitorHandle {
monitor: gdk::Monitor,
// We have to store the monitor number in GdkScreen despite
// it's deprecated. Otherwise, there's no way to set it in
// GtkWindow in Gtk3.
pub(crate) number: i32,
pub(crate) monitor: gdk::Monitor,
}

impl MonitorHandle {
pub fn new(display: &gdk::Display, number: i32) -> Self {
let monitor = display.monitor(number).unwrap();
Self { monitor, number }
Self { monitor }
}

#[inline]
Expand Down
39 changes: 20 additions & 19 deletions src/platform_impl/linux/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ impl Window {

// Set GDK Visual
if pl_attribs.rgba_visual || attributes.transparent {
if let Some(screen) = window.screen() {
if let Some(screen) = GtkWindowExt::screen(&window) {
if let Some(visual) = screen.rgba_visual() {
window.set_visual(Some(&visual));
}
Expand Down Expand Up @@ -204,9 +204,16 @@ impl Window {
window.set_title(&attributes.title);
if let Some(Fullscreen::Borderless(m)) = &attributes.fullscreen {
if let Some(monitor) = m {
let number = monitor.inner.number;
let screen = window.display().default_screen();
window.fullscreen_on_monitor(&screen, number);
let display = window.display();
let monitor = &monitor.inner;
let monitors = display.n_monitors();
for i in 0..monitors {
let m = display.monitor(i).unwrap();
if m == monitor.monitor {
let screen = display.default_screen();
window.fullscreen_on_monitor(&screen, i);
}
}
} else {
window.fullscreen();
}
Expand Down Expand Up @@ -755,21 +762,16 @@ impl Window {
}

pub fn current_monitor(&self) -> Option<RootMonitorHandle> {
let screen = self.window.display().default_screen();
let display = self.window.display();
// `.window()` returns `None` if the window is invisible;
// we fallback to the primary monitor
let number = self
let monitor = self
.window
.window()
.map(|window| {
#[allow(deprecated)] // Gtk3 Window only accepts Gdkscreen
screen.monitor_at_window(&window)
})
.unwrap_or_else(|| {
#[allow(deprecated)] // Gtk3 Window only accepts Gdkscreen
screen.primary_monitor()
});
let handle = MonitorHandle::new(&self.window.display(), number);
.map(|window| display.monitor_at_window(&window))
.unwrap_or_else(|| display.primary_monitor())
.unwrap();
let handle = MonitorHandle { monitor };
Some(RootMonitorHandle { inner: handle })
}

Expand All @@ -788,10 +790,9 @@ impl Window {
}

pub fn primary_monitor(&self) -> Option<RootMonitorHandle> {
let screen = self.window.display().default_screen();
#[allow(deprecated)] // Gtk3 Window only accepts Gdkscreen
let number = screen.primary_monitor();
let handle = MonitorHandle::new(&self.window.display(), number);
let display = self.window.display();
let monitor = display.primary_monitor().unwrap();
let handle = MonitorHandle { monitor };
Some(RootMonitorHandle { inner: handle })
}

Expand Down

0 comments on commit b59f1b4

Please sign in to comment.