[gnome-break-timer/gtk-4] Migrate to gtk4
- From: Dylan McCall <dylanmccall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-break-timer/gtk-4] Migrate to gtk4
- Date: Thu, 21 Jul 2022 20:50:41 +0000 (UTC)
commit 4a67812cae0c949d83e2e9f1e631f7713b6aabe9
Author: Dylan McCall <dylan dylanmccall ca>
Date: Thu Feb 4 14:54:47 2021 -0800
Migrate to gtk4
meson.build | 2 +-
src/daemon/Application.vala | 8 +-
src/daemon/UIManager.vala | 6 +-
src/settings/Application.vala | 32 ++-
src/settings/BreakSettingsDialog.vala | 27 +-
src/settings/MainWindow.vala | 52 ++--
src/settings/break/BreakInfoWidget.vala | 15 +-
src/settings/break/BreakSettingsWidget.vala | 33 +--
src/settings/meson.build | 1 -
src/settings/panels/StatusPanel.vala | 31 ++-
src/settings/panels/WelcomePanel.vala | 48 ++--
.../timerbreak/TimerBreakSettingsWidget.vala | 4 +-
.../timerbreak/TimerBreakStatusWidget.vala | 8 +-
src/settings/widgets/CircleCounter.vala | 45 ++-
src/settings/widgets/OverlayArrow.vala | 39 ++-
ui/settings-panels.ui | 309 ++++++++-------------
16 files changed, 295 insertions(+), 365 deletions(-)
---
diff --git a/meson.build b/meson.build
index f2ba6dc..7ffd66f 100644
--- a/meson.build
+++ b/meson.build
@@ -15,7 +15,7 @@ gio_unix_dep = dependency('gio-unix-2.0')
glib_dep = dependency('glib-2.0')
gobject_dep = dependency('gobject-2.0')
gsound_dep = dependency('gsound')
-gtk_dep = dependency('gtk+-3.0')
+gtk_dep = dependency('gtk4')
json_glib_dep = dependency('json-glib-1.0')
libcanberra_dep = dependency('libcanberra')
libnotify_dep = dependency('libnotify')
diff --git a/src/daemon/Application.vala b/src/daemon/Application.vala
index 0fb9432..993480d 100644
--- a/src/daemon/Application.vala
+++ b/src/daemon/Application.vala
@@ -1,6 +1,6 @@
/* Application.vala
*
- * Copyright 2020 Dylan McCall <dylan dylanmccall ca>
+ * Copyright 2020-2021 Dylan McCall <dylan dylanmccall ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -71,11 +71,11 @@ public class Application : Gtk.Application {
Notify.init (app_name);
/* set up custom gtk style for application */
- Gdk.Screen screen = Gdk.Screen.get_default ();
Gtk.CssProvider style_provider = new Gtk.CssProvider ();
- Gtk.StyleContext.add_provider_for_screen (
- screen,
+ // FIXME:
+ Gtk.StyleContext.add_provider_for_display (
+ Gdk.Display.get_default (),
style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
);
diff --git a/src/daemon/UIManager.vala b/src/daemon/UIManager.vala
index 9c10ece..0d6276f 100644
--- a/src/daemon/UIManager.vala
+++ b/src/daemon/UIManager.vala
@@ -1,6 +1,6 @@
/* UIManager.vala
*
- * Copyright 2020 Dylan McCall <dylan dylanmccall ca>
+ * Copyright 2020-2021 Dylan McCall <dylan dylanmccall ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -141,7 +141,9 @@ public class UIManager : SimpleFocusManager, GLib.Initable {
}
public bool can_lock_screen () {
- return ! this.application.is_inhibited (Gtk.ApplicationInhibitFlags.IDLE);
+ // FIXME: CHECK FOR THIS SOMEHOW
+ return true;
+ // return ! this.application.is_inhibited (Gtk.ApplicationInhibitFlags.IDLE);
}
public void lock_screen () {
diff --git a/src/settings/Application.vala b/src/settings/Application.vala
index dfe5c11..13da188 100644
--- a/src/settings/Application.vala
+++ b/src/settings/Application.vala
@@ -1,6 +1,6 @@
/* Application.vala
*
- * Copyright 2020 Dylan McCall <dylan dylanmccall ca>
+ * Copyright 2020-2021 Dylan McCall <dylan dylanmccall ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -77,17 +77,17 @@ public class Application : Gtk.Application {
base.startup ();
/* set up custom gtk style for application */
- Gdk.Screen screen = Gdk.Screen.get_default ();
Gtk.CssProvider style_provider = new Gtk.CssProvider ();
- try {
- style_provider.load_from_data (STYLE_DATA, -1);
- } catch (GLib.Error error) {
- GLib.warning ("Error loading style data: %s", error.message);
- }
+ // FIXME
+ // try {
+ // style_provider.load_from_data (STYLE_DATA, -1);
+ // } catch (GLib.Error error) {
+ // GLib.warning ("Error loading style data: %s", error.message);
+ // }
- Gtk.StyleContext.add_provider_for_screen (
- screen,
+ Gtk.StyleContext.add_provider_for_display (
+ Gdk.Display.get_default (),
style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
);
@@ -120,14 +120,16 @@ public class Application : Gtk.Application {
this.main_window.get_style_context ().add_class ("devel");
}
- this.main_window.window_state_event.connect (this.on_main_window_window_state_event);
+ this.main_window.get_surface ().event.connect (this.on_main_window_event);
}
- private bool on_main_window_window_state_event (Gdk.EventWindowState event) {
- bool focused = (
- Gdk.WindowState.FOCUSED in event.changed_mask &&
- Gdk.WindowState.FOCUSED in event.new_window_state
- );
+ private bool on_main_window_event (Gdk.Event event) {
+ if (event.get_event_type () != Gdk.EventType.FOCUS_CHANGE) {
+ return false;
+ }
+
+ Gdk.FocusEvent focus_event = (Gdk.FocusEvent) event;
+ bool focused = focus_event.get_in ();
if (focused && this.initial_focus && this.break_manager.master_enabled) {
// We should always refresh permissions at startup if enabled. Wait
diff --git a/src/settings/BreakSettingsDialog.vala b/src/settings/BreakSettingsDialog.vala
index e43a0f7..9c79f23 100644
--- a/src/settings/BreakSettingsDialog.vala
+++ b/src/settings/BreakSettingsDialog.vala
@@ -1,6 +1,6 @@
/* BreakSettingsDialog.vala
*
- * Copyright 2020 Dylan McCall <dylan dylanmccall ca>
+ * Copyright 2020-2021 Dylan McCall <dylan dylanmccall ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -27,7 +27,7 @@ public class BreakSettingsDialog : Gtk.Dialog {
private BreakManager break_manager;
private BreakConfigurationChooser configuration_chooser;
- private Gtk.Grid breaks_grid;
+ private Gtk.Box breaks_grid;
private const int ABOUT_BUTTON_RESPONSE = 5;
@@ -42,22 +42,21 @@ public class BreakSettingsDialog : Gtk.Dialog {
this.set_deletable (true);
this.set_resizable (false);
- this.delete_event.connect (this.hide_on_delete);
+ // this.delete_event.connect (this.hide_on_delete);
this.response.connect (this.response_cb);
- Gtk.Container content_area = (Gtk.Container)this.get_content_area ();
+ Gtk.Box content_area = this.get_content_area ();
- Gtk.Grid content = new Gtk.Grid ();
- content_area.add (content);
- content.set_orientation (Gtk.Orientation.VERTICAL);
+ Gtk.Box content = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
+ content_area.append (content);
content.set_margin_top (10);
content.set_margin_start (10);
content.set_margin_bottom (10);
content.set_margin_end (10);
this.configuration_chooser = new BreakConfigurationChooser ();
- content.add (this.configuration_chooser);
+ content.append (this.configuration_chooser);
this.configuration_chooser.add_configuration (
{ "microbreak", "restbreak" },
_("A mix of short breaks and long breaks")
@@ -72,11 +71,10 @@ public class BreakSettingsDialog : Gtk.Dialog {
);
settings.bind ("selected-breaks", this.configuration_chooser, "selected-break-ids",
SettingsBindFlags.DEFAULT);
- this.breaks_grid = new FixedSizeGrid ();
- content.add (this.breaks_grid);
- this.breaks_grid.set_orientation (Gtk.Orientation.VERTICAL);
+ this.breaks_grid = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
+ content.append (this.breaks_grid);
- content.show_all ();
+ content.show ();
this.configuration_chooser.notify["selected-break-ids"].connect (this.update_break_configuration);
}
@@ -84,7 +82,7 @@ public class BreakSettingsDialog : Gtk.Dialog {
public bool init (GLib.Cancellable? cancellable) throws GLib.Error {
foreach (BreakType break_type in this.break_manager.all_breaks ()) {
var settings_widget = break_type.settings_widget;
- this.breaks_grid.add (settings_widget);
+ this.breaks_grid.append (settings_widget);
settings_widget.realize ();
settings_widget.set_valign (Gtk.Align.CENTER);
settings_widget.set_vexpand (true);
@@ -110,6 +108,9 @@ public class BreakSettingsDialog : Gtk.Dialog {
private void response_cb (int response_id) {
if (response_id == Gtk.ResponseType.CLOSE) {
this.hide ();
+ } else if (response_id == Gtk.ResponseType.DELETE_EVENT) {
+ // FIXME: DO WE NEED THIS
+ this.hide ();
}
}
}
diff --git a/src/settings/MainWindow.vala b/src/settings/MainWindow.vala
index 061a8be..e018c1c 100644
--- a/src/settings/MainWindow.vala
+++ b/src/settings/MainWindow.vala
@@ -1,6 +1,6 @@
/* MainWindow.vala
*
- * Copyright 2020 Dylan McCall <dylan dylanmccall ca>
+ * Copyright 2020-2021 Dylan McCall <dylan dylanmccall ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -46,13 +46,19 @@ public class MainWindow : Gtk.ApplicationWindow, GLib.Initable {
private WelcomePanel welcome_panel;
private StatusPanel status_panel;
- private class MessageBar : Gtk.InfoBar {
+ private class MessageBar : Gtk.Box {
protected weak MainWindow main_window;
public signal void close_message_bar ();
+ protected Gtk.InfoBar info_bar;
+
protected MessageBar (MainWindow main_window) {
- GLib.Object ();
+ GLib.Object (orientation: Gtk.Orientation.VERTICAL, spacing: 0);
+
+ this.info_bar = new Gtk.InfoBar ();
+ this.append (info_bar);
+ this.info_bar.show ();
this.main_window = main_window;
}
@@ -69,16 +75,13 @@ public class MainWindow : Gtk.ApplicationWindow, GLib.Initable {
this.error_type = error_type;
/* Label for a button that opens GNOME Settings to change permissions */
- this.add_button (_("Open Settings"), RESPONSE_OPEN_SETTINGS);
+ this.info_bar.add_button (_("Open Settings"), RESPONSE_OPEN_SETTINGS);
- Gtk.Container content_area = this.get_content_area ();
Gtk.Label label = new Gtk.Label (_("Break Timer needs permission to start automatically and run
in the background"));
- content_area.add (label);
-
- content_area.show_all ();
+ this.info_bar.add_child (label);
- this.response.connect (this.on_response);
- this.close.connect (this.on_close);
+ this.info_bar.response.connect (this.on_response);
+ this.info_bar.close.connect (this.on_close);
}
private void on_response (int response_id) {
@@ -126,13 +129,13 @@ public class MainWindow : Gtk.ApplicationWindow, GLib.Initable {
this.break_settings_dialog.set_transient_for (this);
Gtk.Box content = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
- this.add (content);
+ this.set_child (content);
content.set_orientation (Gtk.Orientation.VERTICAL);
content.set_vexpand (true);
this.header = new Gtk.HeaderBar ();
this.set_titlebar (this.header);
- this.header.set_show_close_button (true);
+ this.header.set_show_title_buttons (true);
this.header.set_hexpand (true);
this.master_switch = new Gtk.Switch ();
@@ -147,19 +150,20 @@ public class MainWindow : Gtk.ApplicationWindow, GLib.Initable {
this.settings_button = new Gtk.Button ();
settings_button.clicked.connect (this.settings_clicked_cb);
- settings_button.set_image (new Gtk.Image.from_icon_name (
- "alarm-symbolic",
- Gtk.IconSize.MENU)
+ // FIXME: Verify, especially IconSize
+ settings_button.set_child (
+ new Gtk.Image.from_icon_name ("alarm-symbolic")
);
settings_button.valign = Gtk.Align.CENTER;
- settings_button.set_always_show_image (true);
+ // FIXME: Verify
+ // settings_button.set_always_show_image (true);
header.pack_end (this.settings_button);
this.messages_box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
- content.pack_end (this.messages_box);
+ content.append (this.messages_box);
this.main_stack = new Gtk.Stack ();
- content.pack_end (this.main_stack);
+ content.append (this.main_stack);
main_stack.set_margin_top (6);
main_stack.set_margin_bottom (6);
main_stack.set_transition_duration (250);
@@ -171,8 +175,8 @@ public class MainWindow : Gtk.ApplicationWindow, GLib.Initable {
this.main_stack.add_named (this.welcome_panel, "welcome_panel");
this.welcome_panel.tour_finished.connect (this.on_tour_finished);
- this.header.show_all ();
- content.show_all ();
+ this.header.show ();
+ content.show ();
break_manager.notify["permissions-error"].connect (this.on_break_manager_permissions_error_change);
break_manager.notify["foreground-break"].connect (this.update_visible_panel);
@@ -215,7 +219,7 @@ public class MainWindow : Gtk.ApplicationWindow, GLib.Initable {
this.message_bars.set (message_id, message_bar);
- this.messages_box.pack_end (message_bar);
+ this.messages_box.append (message_bar);
message_bar.show ();
message_bar.close_message_bar.connect (() => {
this.hide_message_bar (message_id);
@@ -255,13 +259,13 @@ public class MainWindow : Gtk.ApplicationWindow, GLib.Initable {
BreakType? foreground_break = this.break_manager.foreground_break;
if (this.welcome_panel.is_active ()) {
this.main_stack.set_visible_child_full ("welcome_panel", transition);
- this.header.set_title (_("Welcome Tour"));
+ this.set_title (_("Welcome Tour"));
} else if (foreground_break != null) {
this.main_stack.set_visible_child_full (foreground_break.id, transition);
- this.header.set_title (foreground_break.info_widget.title);
+ this.set_title (foreground_break.info_widget.title);
} else {
this.main_stack.set_visible_child_full ("status_panel", transition);
- this.header.set_title (_("Break Timer"));
+ this.set_title (_("Break Timer"));
}
}
diff --git a/src/settings/break/BreakInfoWidget.vala b/src/settings/break/BreakInfoWidget.vala
index 37cdadd..335e101 100644
--- a/src/settings/break/BreakInfoWidget.vala
+++ b/src/settings/break/BreakInfoWidget.vala
@@ -1,6 +1,6 @@
/* BreakInfoWidget.vala
*
- * Copyright 2020 Dylan McCall <dylan dylanmccall ca>
+ * Copyright 2020-2021 Dylan McCall <dylan dylanmccall ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@
namespace BreakTimer.Settings.Break {
-public abstract class BreakInfoWidget : Gtk.Grid {
+public abstract class BreakInfoWidget : Gtk.Box {
public BreakType break_type { public get; private set; }
public string title { public get; private set; }
@@ -36,23 +36,22 @@ public abstract class BreakInfoWidget : Gtk.Grid {
this.set_orientation (Gtk.Orientation.VERTICAL);
this.set_hexpand (true);
- this.set_row_spacing (24);
+ this.set_spacing (24);
this.get_style_context ().add_class ("_break-info");
this.heading_label = new Gtk.Label (null);
- this.add (this.heading_label);
+ this.append (this.heading_label);
this.heading_label.get_style_context ().add_class ("_break-info-heading");
this.description_label = new Gtk.Label (null);
- this.add (this.description_label);
- this.description_label.set_line_wrap (true);
+ this.append (this.description_label);
this.description_label.set_justify (Gtk.Justification.CENTER);
this.description_label.set_max_width_chars (60);
this.detail_label = new Gtk.Label (null);
- this.add (this.detail_label);
+ this.append (this.detail_label);
- this.show_all ();
+ this.show ();
}
protected void set_heading (string heading) {
diff --git a/src/settings/break/BreakSettingsWidget.vala b/src/settings/break/BreakSettingsWidget.vala
index 25ca960..8aa122b 100644
--- a/src/settings/break/BreakSettingsWidget.vala
+++ b/src/settings/break/BreakSettingsWidget.vala
@@ -1,6 +1,6 @@
/* BreakSettingsWidget.vala
*
- * Copyright 2020 Dylan McCall <dylan dylanmccall ca>
+ * Copyright 2020-2021 Dylan McCall <dylan dylanmccall ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,27 +20,24 @@
namespace BreakTimer.Settings.Break {
-public abstract class BreakSettingsWidget : Gtk.Grid {
- private Gtk.Grid header;
- private Gtk.Grid details;
+public abstract class BreakSettingsWidget : Gtk.Box {
+ private Gtk.Box header;
+ private Gtk.Box details;
protected BreakSettingsWidget (BreakType break_type, string title, string? description) {
GLib.Object ();
this.set_orientation (Gtk.Orientation.VERTICAL);
- this.set_row_spacing (10);
+ this.set_spacing (10);
- this.header = new Gtk.Grid ();
- this.add (this.header);
- this.header.set_column_spacing (12);
+ this.header = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 12);
+ this.append (this.header);
- var title_grid = new Gtk.Grid ();
+ var title_grid = new Gtk.Box (Gtk.Orientation.VERTICAL, 4);
this.set_header (title_grid);
- title_grid.set_orientation (Gtk.Orientation.VERTICAL);
- title_grid.set_row_spacing (4);
var title_label = new Gtk.Label (title);
- title_grid.add (title_label);
+ title_grid.append (title_label);
title_label.get_style_context ().add_class ("_settings-title");
title_label.set_halign (Gtk.Align.FILL);
title_label.set_hexpand (true);
@@ -54,27 +51,27 @@ public abstract class BreakSettingsWidget : Gtk.Grid {
// description_label.set_hexpand (true);
// description_label.set_justify (Gtk.Justification.CENTER);
- this.details = new Gtk.Grid ();
- this.add (this.details);
+ this.details = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
+ this.append (this.details);
this.details.set_margin_start (12);
this.details.set_halign (Gtk.Align.CENTER);
this.details.set_hexpand (true);
- this.show_all ();
+ this.show ();
}
protected void set_header (Gtk.Widget content) {
- this.header.attach (content, 0, 0, 1, 1);
+ this.header.append (content);
}
protected void set_header_action (Gtk.Widget content) {
- this.header.attach (content, 1, 0, 1, 1);
+ this.header.append (content);
content.set_halign (Gtk.Align.END);
content.set_valign (Gtk.Align.CENTER);
}
protected void set_details (Gtk.Widget content) {
- this.details.add (content);
+ this.details.append (content);
}
}
diff --git a/src/settings/meson.build b/src/settings/meson.build
index f4c5f3f..55ca366 100644
--- a/src/settings/meson.build
+++ b/src/settings/meson.build
@@ -22,7 +22,6 @@ settings_lib_sources = files(
'timerbreak/TimerBreakType.vala',
'widgets/BreakConfigurationChooser.vala',
'widgets/CircleCounter.vala',
- 'widgets/FixedSizeGrid.vala',
'widgets/OverlayArrow.vala',
'widgets/TimeChooser.vala',
'widgets/Transition.vala'
diff --git a/src/settings/panels/StatusPanel.vala b/src/settings/panels/StatusPanel.vala
index 12784e0..8f34bfc 100644
--- a/src/settings/panels/StatusPanel.vala
+++ b/src/settings/panels/StatusPanel.vala
@@ -1,6 +1,6 @@
/* StatusPanel.vala
*
- * Copyright 2020 Dylan McCall <dylan dylanmccall ca>
+ * Copyright 2020-2021 Dylan McCall <dylan dylanmccall ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -22,15 +22,16 @@ using BreakTimer.Settings.Break;
namespace BreakTimer.Settings.Panels {
-private class StatusPanel : Gtk.Stack, GLib.Initable {
+private class StatusPanel : Gtk.Box, GLib.Initable {
private BreakManager break_manager;
- private Gtk.Grid breaks_list;
+ private Gtk.Stack stack;
+ private Gtk.Box breaks_list;
private Gtk.Widget no_breaks_message;
private Gtk.Widget error_message;
public StatusPanel (BreakManager break_manager, Gtk.Builder builder) {
- GLib.Object ();
+ GLib.Object (orientation: Gtk.Orientation.VERTICAL, spacing: 0);
this.break_manager = break_manager;
@@ -41,14 +42,17 @@ private class StatusPanel : Gtk.Stack, GLib.Initable {
this.set_hexpand (true);
this.set_vexpand (true);
+ this.stack = new Gtk.Stack ();
+ this.append (this.stack);
+
this.breaks_list = this.build_breaks_list (break_manager);
- this.add (this.breaks_list);
+ this.stack.add_child (this.breaks_list);
this.no_breaks_message = builder.get_object ("status_stopped") as Gtk.Widget;
- this.add (this.no_breaks_message);
+ this.stack.add_child (this.no_breaks_message);
this.error_message = builder.get_object ("status_error") as Gtk.Widget;
- this.add (this.error_message);
+ this.stack.add_child (this.error_message);
break_manager.status_changed.connect (this.status_changed_cb);
}
@@ -56,7 +60,7 @@ private class StatusPanel : Gtk.Stack, GLib.Initable {
public bool init (GLib.Cancellable? cancellable) throws GLib.Error {
foreach (BreakType break_type in this.break_manager.all_breaks ()) {
var status_widget = break_type.status_widget;
- this.breaks_list.add (status_widget);
+ this.breaks_list.append (status_widget);
status_widget.set_margin_top (18);
status_widget.set_margin_end (20);
status_widget.set_margin_bottom (18);
@@ -66,9 +70,8 @@ private class StatusPanel : Gtk.Stack, GLib.Initable {
return true;
}
- private Gtk.Grid build_breaks_list (BreakManager break_manager) {
- var breaks_list = new Gtk.Grid ();
- breaks_list.set_orientation (Gtk.Orientation.VERTICAL);
+ private Gtk.Box build_breaks_list (BreakManager break_manager) {
+ var breaks_list = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
breaks_list.set_halign (Gtk.Align.CENTER);
breaks_list.set_valign (Gtk.Align.CENTER);
@@ -92,11 +95,11 @@ private class StatusPanel : Gtk.Stack, GLib.Initable {
}
if (any_breaks_enabled) {
- this.set_visible_child (this.breaks_list);
+ this.stack.set_visible_child (this.breaks_list);
} else if (this.break_manager.is_working ()) {
- this.set_visible_child (this.no_breaks_message);
+ this.stack.set_visible_child (this.no_breaks_message);
} else {
- this.set_visible_child (this.error_message);
+ this.stack.set_visible_child (this.error_message);
}
}
}
diff --git a/src/settings/panels/WelcomePanel.vala b/src/settings/panels/WelcomePanel.vala
index 9598a55..0eba10d 100644
--- a/src/settings/panels/WelcomePanel.vala
+++ b/src/settings/panels/WelcomePanel.vala
@@ -1,6 +1,6 @@
/* WelcomePanel.vala
*
- * Copyright 2020 Dylan McCall <dylan dylanmccall ca>
+ * Copyright 2020-2021 Dylan McCall <dylan dylanmccall ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,7 +24,7 @@ namespace BreakTimer.Settings.Panels {
/* TODO: It would be nice to move some of this code to a UI file built with
* Glade. Especially anything involving long strings. */
-private class WelcomePanel : Gtk.Stack {
+private class WelcomePanel : Gtk.Box {
private BreakManager break_manager;
private MainWindow main_window;
@@ -35,49 +35,55 @@ private class WelcomePanel : Gtk.Stack {
}
private Step current_step;
- private Gtk.Container start_page;
- private Gtk.Container breaks_page;
- private Gtk.Container ready_page;
+ private Gtk.Stack stack;
+
+ private Gtk.Box start_page;
+ private Gtk.Box breaks_page;
+ private Gtk.Box ready_page;
public signal void tour_finished ();
public WelcomePanel (BreakManager break_manager, Gtk.Builder builder, MainWindow main_window) {
- GLib.Object ();
+ GLib.Object (orientation: Gtk.Orientation.VERTICAL, spacing: 0);
this.break_manager = break_manager;
this.main_window = main_window;
+ this.stack = new Gtk.Stack ();
+ this.append (this.stack);
+ this.stack.show ();
+
if (this.break_manager.master_enabled) {
this.current_step = Step.READY;
} else {
this.current_step = Step.WELCOME;
}
- this.set_transition_type (Gtk.StackTransitionType.SLIDE_LEFT);
- this.set_transition_duration (250);
+ this.stack.set_transition_type (Gtk.StackTransitionType.SLIDE_LEFT);
+ this.stack.set_transition_duration (250);
this.start_page = this.build_page_with_arrow (
builder, "welcome_start", "switch_on_label", main_window.get_master_switch ());
- this.add (this.start_page);
+ this.stack.add_child (this.start_page);
this.breaks_page = this.build_page_with_arrow (
builder, "welcome_breaks", "settings_label", main_window.get_settings_button ());
- this.add (this.breaks_page);
+ this.stack.add_child (this.breaks_page);
this.ready_page = this.build_page_with_arrow (
builder, "welcome_ready", "keeps_running_label", main_window.get_close_button ());
- this.add (this.ready_page);
+ this.stack.add_child (this.ready_page);
var breaks_ok_button = new Gtk.Button.with_label (_("OK, got it!"));
breaks_ok_button.get_style_context ().add_class ("suggested-action");
breaks_ok_button.set_halign (Gtk.Align.CENTER);
- this.breaks_page.add (breaks_ok_button);
+ this.breaks_page.append (breaks_ok_button);
breaks_ok_button.clicked.connect (this.on_breaks_confirmed);
var ready_ok_button = new Gtk.Button.with_label (_("Ready to go"));
ready_ok_button.get_style_context ().add_class ("suggested-action");
ready_ok_button.set_halign (Gtk.Align.CENTER);
- this.ready_page.add (ready_ok_button);
+ this.ready_page.append (ready_ok_button);
ready_ok_button.clicked.connect (this.on_ready_confirmed);
break_manager.notify["master-enabled"].connect (this.on_master_switch_toggled);
@@ -101,16 +107,14 @@ private class WelcomePanel : Gtk.Stack {
}
}
- private Gtk.Container build_page_with_arrow (Gtk.Builder builder, string page_name, string?
arrow_source_name, Gtk.Widget? arrow_target) {
- Gtk.Grid page_wrapper = new Gtk.Grid ();
- page_wrapper.set_orientation (Gtk.Orientation.VERTICAL);
- page_wrapper.set_row_spacing (16);
+ private Gtk.Box build_page_with_arrow (Gtk.Builder builder, string page_name, string? arrow_source_name,
Gtk.Widget? arrow_target) {
+ Gtk.Box page_wrapper = new Gtk.Box (Gtk.Orientation.VERTICAL, 16);
page_wrapper.set_margin_bottom (30);
Gtk.Overlay page_overlay = new Gtk.Overlay ();
- page_wrapper.add (page_overlay);
+ page_wrapper.append (page_overlay);
- page_overlay.add (builder.get_object (page_name) as Gtk.Widget);
+ page_overlay.set_child (builder.get_object (page_name) as Gtk.Widget);
Gtk.Widget arrow_source = builder.get_object (arrow_source_name) as Gtk.Widget;
if (arrow_source != null && arrow_target != null) {
var arrow = new OverlayArrow (arrow_source, arrow_target);
@@ -132,11 +136,11 @@ private class WelcomePanel : Gtk.Stack {
if (next_step > this.current_step) this.current_step = next_step;
if (this.current_step == Step.WELCOME) {
- this.set_visible_child (this.start_page);
+ this.stack.set_visible_child (this.start_page);
} else if (this.current_step == Step.BREAKS) {
- this.set_visible_child (this.breaks_page);
+ this.stack.set_visible_child (this.breaks_page);
} else {
- this.set_visible_child (this.ready_page);
+ this.stack.set_visible_child (this.ready_page);
}
}
}
diff --git a/src/settings/timerbreak/TimerBreakSettingsWidget.vala
b/src/settings/timerbreak/TimerBreakSettingsWidget.vala
index 47080e0..652621e 100644
--- a/src/settings/timerbreak/TimerBreakSettingsWidget.vala
+++ b/src/settings/timerbreak/TimerBreakSettingsWidget.vala
@@ -1,6 +1,6 @@
/* TimerBreakSettingsWidget.vala
*
- * Copyright 2020 Dylan McCall <dylan dylanmccall ca>
+ * Copyright 2020-2021 Dylan McCall <dylan dylanmccall ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -51,7 +51,7 @@ public abstract class TimerBreakSettingsWidget : BreakSettingsWidget {
details_grid.attach_next_to (duration_chooser, duration_label, Gtk.PositionType.RIGHT, 1, 1);
break_type.settings.bind ("duration-seconds", duration_chooser, "time-seconds",
SettingsBindFlags.DEFAULT);
- details_grid.show_all ();
+ details_grid.show ();
}
}
diff --git a/src/settings/timerbreak/TimerBreakStatusWidget.vala
b/src/settings/timerbreak/TimerBreakStatusWidget.vala
index 191f56d..28ff22e 100644
--- a/src/settings/timerbreak/TimerBreakStatusWidget.vala
+++ b/src/settings/timerbreak/TimerBreakStatusWidget.vala
@@ -1,6 +1,6 @@
/* TimerBreakStatusWidget.vala
*
- * Copyright 2020 Dylan McCall <dylan dylanmccall ca>
+ * Copyright 2020-2021 Dylan McCall <dylan dylanmccall ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -51,16 +51,16 @@ public abstract class TimerBreakStatusWidget : BreakStatusWidget {
labels_grid.set_valign (Gtk.Align.CENTER);
this.status_label = new Gtk.Label (null);
- labels_grid.add (this.status_label);
+ labels_grid.attach (this.status_label, 0, 0, 1, 1);
this.status_label.set_width_chars (25);
this.status_label.get_style_context ().add_class ("_break-status-heading");
this.time_label = new Gtk.Label (null);
- labels_grid.add (this.time_label);
+ labels_grid.attach_next_to (this.time_label, this.status_label, Gtk.PositionType.RIGHT, 1, 1);
this.time_label.set_width_chars (25);
this.time_label.get_style_context ().add_class ("_break-status-body");
- this.show_all ();
+ this.show ();
break_type.timer_status_changed.connect (this.timer_status_changed_cb);
}
diff --git a/src/settings/widgets/CircleCounter.vala b/src/settings/widgets/CircleCounter.vala
index a8b603b..0d4a5f1 100644
--- a/src/settings/widgets/CircleCounter.vala
+++ b/src/settings/widgets/CircleCounter.vala
@@ -1,6 +1,6 @@
/* CircleCounter.vala
*
- * Copyright 2020 Dylan McCall <dylan dylanmccall ca>
+ * Copyright 2020-2021 Dylan McCall <dylan dylanmccall ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -69,7 +69,7 @@ public class CircleCounter : Gtk.Widget {
public CircleCounter () {
GLib.Object ();
- this.set_has_window (false);
+ // this.set_has_window (false);
this.get_style_context ().add_class ("_circle-counter");
@@ -78,7 +78,6 @@ public class CircleCounter : Gtk.Widget {
);
this.map.connect (this.on_map_cb);
- this.draw.connect (this.on_draw_cb);
this.notify["direction"].connect (this.on_direction_notify_cb);
this.notify["progress"].connect (this.on_progress_notify_cb);
this.notify["draw-angle"].connect (this.on_draw_angle_notify_cb);
@@ -131,13 +130,15 @@ public class CircleCounter : Gtk.Widget {
this.first_frame = true;
}
- private bool on_draw_cb (Cairo.Context cr) {
+ public override void snapshot (Gtk.Snapshot snapshot) {
+ // FIXME: THIS LOOKS WRONG
+ Graphene.Rect bounds = snapshot.to_node ().get_bounds ();
+ Cairo.Context cr = snapshot.append_cairo (bounds);
Gtk.StyleContext style_context = this.get_style_context ();
- Gtk.StateFlags state = this.get_state_flags ();
Gtk.Allocation allocation;
this.get_allocation (out allocation);
- Gdk.RGBA foreground_color = style_context.get_color (state);
+ Gdk.RGBA foreground_color = style_context.get_color ();
int center_x = allocation.width / 2;
int center_y = allocation.height / 2;
@@ -174,25 +175,23 @@ public class CircleCounter : Gtk.Widget {
cr.stroke ();
cr.pop_group_to_source ();
cr.paint_with_alpha (0.7);
-
- return true;
- }
-
- public override void get_preferred_width (out int minimum_width, out int natural_width) {
- var diameter = calculate_diameter ();
- minimum_width = diameter;
- natural_width = diameter;
}
- public override void get_preferred_height (out int minimum_height, out int natural_height) {
- var diameter = calculate_diameter ();
- minimum_height = diameter;
- natural_height = diameter;
- }
-
- public override void size_allocate (Gtk.Allocation allocation) {
- base.size_allocate (allocation);
- }
+ // FIXME: DO THIS
+ // public override void measure (Orientation orientation, int for_size, out int minimum, out int
natural, out int minimum_baseline, out int natural_baseline) {
+ // }
+
+ // public override void get_preferred_width (out int minimum_width, out int natural_width) {
+ // var diameter = calculate_diameter ();
+ // minimum_width = diameter;
+ // natural_width = diameter;
+ // }
+
+ // public override void get_preferred_height (out int minimum_height, out int natural_height) {
+ // var diameter = calculate_diameter ();
+ // minimum_height = diameter;
+ // natural_height = diameter;
+ // }
private int calculate_diameter () {
return 2 * DEFAULT_RADIUS;
diff --git a/src/settings/widgets/OverlayArrow.vala b/src/settings/widgets/OverlayArrow.vala
index 81df367..1f84f95 100644
--- a/src/settings/widgets/OverlayArrow.vala
+++ b/src/settings/widgets/OverlayArrow.vala
@@ -1,6 +1,6 @@
/* OverlayArrow.vala
*
- * Copyright 2020 Dylan McCall <dylan dylanmccall ca>
+ * Copyright 2020-2021 Dylan McCall <dylan dylanmccall ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,39 +21,42 @@
namespace BreakTimer.Settings.Widgets {
/* FIXME: This widget is stealing clicks when it is used in an overlay */
-public class OverlayArrow : Gtk.Widget {
+
+public class OverlayArrow : Gtk.DrawingArea {
private Gtk.Widget from_widget;
private Gtk.Widget to_widget;
public OverlayArrow (Gtk.Widget from_widget, Gtk.Widget to_widget) {
GLib.Object ();
- this.set_has_window (false);
+ // this.set_has_window (false);
this.set_halign (Gtk.Align.FILL);
this.set_valign (Gtk.Align.FILL);
this.from_widget = from_widget;
this.to_widget = to_widget;
+
+ this.set_draw_func (this.on_draw_cb);
}
- public override bool draw (Cairo.Context cr) {
+ private void on_draw_cb (Gtk.DrawingArea widget, Cairo.Context cr, int width, int height) {
+ // FIXME: ARE THESE THE SAME AS GIVEN WIDTH AND HEIGHT?
int max_width = this.get_allocated_width ();
int max_height = this.get_allocated_height ();
- int from_x, from_y;
+ double from_x, from_y;
this.get_from_coordinates (out from_x, out from_y);
from_x = from_x.clamp (0, max_width);
from_y = from_y.clamp (0, max_height);
- int to_x, to_y;
+ double to_x, to_y;
this.get_to_coordinates (out to_x, out to_y);
to_x = to_x.clamp (0, max_width);
to_y = to_y.clamp (0, max_height);
- Gtk.StateFlags state = this.get_state_flags ();
Gtk.StyleContext style_context = this.get_style_context ();
- Gdk.RGBA color = style_context.get_color (state);
+ Gdk.RGBA color = style_context.get_color ();
Gdk.cairo_set_source_rgba (cr, color);
cr.set_line_width (1.0);
@@ -70,29 +73,23 @@ public class OverlayArrow : Gtk.Widget {
cr.close_path ();
cr.fill_preserve ();
cr.stroke ();
-
- return true;
- }
-
- public override void size_allocate (Gtk.Allocation allocation) {
- base.size_allocate (allocation);
}
- private void get_points_offset (out int offset_x, out int offset_y) {
+ private void get_points_offset (out double offset_x, out double offset_y) {
Gtk.Allocation to_allocation;
this.to_widget.get_allocation (out to_allocation);
this.from_widget.translate_coordinates (this.to_widget, to_allocation.width/2,
to_allocation.width/2, out offset_x, out offset_y);
}
- private void get_from_coordinates (out int from_x, out int from_y) {
+ private void get_from_coordinates (out double from_x, out double from_y) {
// Is to_widget to the right or to the left?
Gtk.Allocation from_allocation;
this.from_widget.get_allocation (out from_allocation);
- int offset_x, offset_y;
+ double offset_x, offset_y;
this.get_points_offset (out offset_x, out offset_y);
- int from_local_x, from_local_y;
+ double from_local_x, from_local_y;
if (offset_x > 0) {
from_local_x = 0;
from_local_y = from_allocation.height / 2;
@@ -103,15 +100,15 @@ public class OverlayArrow : Gtk.Widget {
this.from_widget.translate_coordinates (this, from_local_x, from_local_y, out from_x, out from_y);
}
- private void get_to_coordinates (out int to_x, out int to_y) {
+ private void get_to_coordinates (out double to_x, out double to_y) {
// Is to_widget to the right or to the left?
Gtk.Allocation to_allocation;
this.to_widget.get_allocation (out to_allocation);
- int offset_x, offset_y;
+ double offset_x, offset_y;
this.get_points_offset (out offset_x, out offset_y);
- int to_local_x, to_local_y;
+ double to_local_x, to_local_y;
if (offset_y > 0) {
to_local_x = to_allocation.width / 2;
to_local_y = to_allocation.height;
diff --git a/ui/settings-panels.ui b/ui/settings-panels.ui
index 1848855..41fb2a3 100644
--- a/ui/settings-panels.ui
+++ b/ui/settings-panels.ui
@@ -1,402 +1,325 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.38.2 -->
<interface>
- <!-- interface-requires gtk+ 3.0 -->
- <object class="GtkGrid" id="status_error">
+ <requires lib="gtk+" version="3.0"/>
+ <object class="GtkBox" id="status_error">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="valign">center</property>
- <property name="margin_left">30</property>
- <property name="margin_right">30</property>
- <property name="margin_top">10</property>
- <property name="margin_bottom">20</property>
+ <property name="margin-start">30</property>
+ <property name="margin-end">30</property>
+ <property name="margin-top">10</property>
+ <property name="margin-bottom">20</property>
<property name="vexpand">True</property>
- <property name="row_spacing">12</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="hexpand">True</property>
- <property name="pixel_size">120</property>
- <property name="icon_name">face-sick-symbolic</property>
+ <property name="pixel-size">120</property>
+ <property name="icon-name">face-sick-symbolic</property>
<style>
<class name="_break-status-icon"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
<child>
<object class="GtkLabel" id="label13">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">Break Timer isn’t responding</property>
<style>
<class name="_break-status-heading"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
<child>
<object class="GtkLabel" id="label14">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">If this continues the next time you log in, please <a
href="https://gitlab.gnome.org/GNOME/gnome-break-timer/issues">open a bug report</a>.
</property>
- <property name="use_markup">True</property>
+ <property name="use-markup">True</property>
<style>
<class name="_break-status-body"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
</object>
- <object class="GtkGrid" id="status_stopped">
+ <object class="GtkBox" id="status_stopped">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="valign">center</property>
- <property name="margin_left">30</property>
- <property name="margin_right">30</property>
- <property name="margin_top">10</property>
- <property name="margin_bottom">20</property>
+ <property name="margin-start">30</property>
+ <property name="margin-end">30</property>
+ <property name="margin-top">10</property>
+ <property name="margin-bottom">20</property>
<property name="vexpand">True</property>
- <property name="row_spacing">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
<child>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="hexpand">True</property>
- <property name="pixel_size">120</property>
- <property name="icon_name">face-sad-symbolic</property>
+ <property name="pixel-size">120</property>
+ <property name="icon-name">face-sad-symbolic</property>
<style>
<class name="_break-status-icon"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
<child>
<object class="GtkLabel" id="label11">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">Break Timer is taking a break</property>
<style>
<class name="_break-status-heading"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
<child>
<object class="GtkLabel" id="label12">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">Turn me on to get those breaks going</property>
<style>
<class name="_break-status-body"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
</object>
- <object class="GtkAlignment" id="welcome_breaks">
+ <object class="GtkBox" id="welcome_breaks">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<child>
- <object class="GtkGrid" id="welcome_breaks_inner">
+ <object class="GtkBox" id="welcome_breaks_inner">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_left">85</property>
- <property name="margin_right">85</property>
- <property name="margin_top">30</property>
- <property name="row_spacing">50</property>
+ <property name="can-focus">False</property>
+ <property name="margin-start">85</property>
+ <property name="margin-end">85</property>
+ <property name="margin-top">30</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">50</property>
<child>
<object class="GtkLabel" id="settings_label">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">end</property>
- <property name="xpad">20</property>
+ <property name="margin-start">20</property>
+ <property name="margin-end">20</property>
<property name="label" translatable="yes">You can change the types of breaks and their timings
from the settings</property>
<style>
<class name="_break-status-hint"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
<child>
- <object class="GtkGrid" id="grid2">
+ <object class="GtkBox" id="grid2">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
- <property name="row_spacing">16</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">16</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="hexpand">True</property>
- <property name="ypad">4</property>
+ <property name="margin-top">4</property>
+ <property name="margin-bottom">4</property>
<property name="label" translatable="yes">Break Timer lets you take small microbreaks as
well as longer breaks.</property>
<style>
<class name="_break-status-body"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="hexpand">True</property>
- <property name="ypad">4</property>
+ <property name="margin-top">4</property>
+ <property name="margin-bottom">4</property>
<property name="label" translatable="yes">Microbreaks are a chance to look away from the
screen and rest your hands.</property>
<style>
<class name="_break-status-body"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="hexpand">True</property>
- <property name="ypad">4</property>
+ <property name="margin-top">4</property>
+ <property name="margin-bottom">4</property>
<property name="label" translatable="yes">Full breaks are time to get away from the computer
and move around.</property>
<style>
<class name="_break-status-body"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">3</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">Breaks and Microbreaks</property>
<style>
<class name="_break-status-heading"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
</child>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
</object>
</child>
</object>
- <object class="GtkAlignment" id="welcome_ready">
+ <object class="GtkBox" id="welcome_ready">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<child>
- <object class="GtkGrid" id="welcome_ready_inner">
+ <object class="GtkBox" id="welcome_ready_inner">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_left">85</property>
- <property name="margin_right">85</property>
- <property name="margin_top">30</property>
- <property name="row_spacing">16</property>
+ <property name="can-focus">False</property>
+ <property name="margin-start">85</property>
+ <property name="margin-end">85</property>
+ <property name="margin-top">30</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">16</property>
<child>
- <object class="GtkGrid" id="grid8">
+ <object class="GtkBox" id="grid8">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="valign">center</property>
<property name="vexpand">True</property>
- <property name="row_spacing">16</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">16</property>
<child>
<object class="GtkLabel" id="label6">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">You can leave me to it</property>
<style>
<class name="_break-status-heading"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
<child>
<object class="GtkLabel" id="keeps_running_label">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="halign">center</property>
- <property name="xpad">20</property>
+ <property name="margin-start">20</property>
+ <property name="margin-end">20</property>
<property name="label" translatable="yes">Break Timer will carry on working in the
background, even if you close it.</property>
<style>
<class name="_break-status-body"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
</object>
</child>
</object>
- <object class="GtkAlignment" id="welcome_start">
+ <object class="GtkBox" id="welcome_start">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<child>
- <object class="GtkGrid" id="welcome_start_inner">
+ <object class="GtkBox" id="welcome_start_inner">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_left">85</property>
- <property name="margin_right">85</property>
- <property name="margin_top">30</property>
- <property name="row_spacing">16</property>
+ <property name="can-focus">False</property>
+ <property name="margin-start">85</property>
+ <property name="margin-end">85</property>
+ <property name="margin-top">30</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">16</property>
<child>
- <object class="GtkGrid" id="grid7">
+ <object class="GtkBox" id="grid7">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="valign">center</property>
- <property name="margin_left">85</property>
- <property name="margin_right">85</property>
+ <property name="margin-start">85</property>
+ <property name="margin-end">85</property>
<property name="vexpand">True</property>
- <property name="row_spacing">16</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">16</property>
<child>
<object class="GtkLabel" id="label8">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">Welcome to Break Timer!</property>
<style>
<class name="_break-status-heading"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
<child>
<object class="GtkLabel" id="label9">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">Breaks are good for you. We'll help you to take
them.</property>
<style>
<class name="_break-status-body"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
<child>
<object class="GtkLabel" id="switch_on_label">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
- <property name="margin_top">50</property>
+ <property name="margin-top">50</property>
<property name="vexpand">True</property>
- <property name="xpad">20</property>
+ <property name="margin-start">20</property>
+ <property name="margin-end">20</property>
<property name="label" translatable="yes">Just switch me on to get started</property>
<style>
<class name="_break-status-hint"/>
</style>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
</object>
</child>
</object>
</interface>
-
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]