Compare commits

...

11 Commits

Author SHA1 Message Date
deltragon edbb7e70d5
fixup confirmation dialogs for gtk4 2024-03-06 21:06:41 +01:00
deltragon 11af2113df
lock keyboard on wayland 2024-03-06 20:39:14 +01:00
deltragon 45bd96f6e1
dont call x11 methods on wayland 2024-03-06 20:39:13 +01:00
deltragon 99327b9262
gtk4: plugin settings 2024-03-06 20:39:13 +01:00
deltragon f56034d61c
gtk4: new break 2024-03-06 20:39:13 +01:00
deltragon bb322f8614
gtk4: break settings 2024-03-06 20:39:13 +01:00
deltragon 4415da6f3b
gtk4: settings dialog 2024-03-06 20:39:13 +01:00
deltragon dca82f090c
gtk4: about dialog 2024-03-06 20:39:12 +01:00
deltragon 0f902fe052
gtk4: get break screen ui running 2024-03-06 20:39:12 +01:00
deltragon 78c9570497
gtk4: simple changes 2024-03-06 20:39:12 +01:00
deltragon b2df0e9a56
fix deprecations in settings dialog 2024-03-06 20:38:26 +01:00
22 changed files with 847 additions and 1765 deletions

View File

@ -20,7 +20,7 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<interface>
<requires lib="gtk+" version="3.12"/>
<requires lib="gtk" version="4.0"/>
<object class="GtkTextBuffer" id="text_buffer_license">
<property name="text" translatable="yes">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
@ -36,167 +36,113 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see &lt;https://www.gnu.org/licenses/&gt;.</property>
</object>
<object class="GtkWindow" id="window_about">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Safe Eyes</property>
<property name="resizable">False</property>
<property name="window_position">center-always</property>
<property name="icon_name">safeeyes</property>
<property name="type_hint">dialog</property>
<property name="gravity">center</property>
<signal name="delete-event" handler="on_window_delete" swapped="no"/>
<property name="resizable">0</property>
<property name="icon-name">safeeyes</property>
<child>
<object class="GtkBox" id="layout_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="visible">1</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<property name="orientation">vertical</property>
<property name="baseline_position">top</property>
<property name="baseline-position">top</property>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="valign">start</property>
<property name="hexpand">True</property>
<property name="hexpand">1</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="lbl_app_name">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
<property name="margin-top">10</property>
<property name="margin-bottom">10</property>
<property name="label" translatable="yes">Safe Eyes 2.1.5</property>
<property name="justify">center</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<attributes>
<attribute name="style" value="normal"/>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_decription">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">4</property>
<property name="label" translatable="yes">Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you to take breaks while you're working long hours at the computer</property>
<property name="visible">1</property>
<property name="margin-top">4</property>
<property name="label" translatable="yes">Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you to take breaks while you&apos;re working long hours at the computer</property>
<property name="justify">fill</property>
<property name="wrap">True</property>
<property name="width_chars">60</property>
<property name="max_width_chars">60</property>
<property name="wrap">1</property>
<property name="width-chars">60</property>
<property name="max-width-chars">60</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_license">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="margin_top">10</property>
<property name="margin-top">10</property>
<property name="label" translatable="yes">License:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkTextView" id="txt_license">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="editable">False</property>
<property name="wrap_mode">word</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<property name="editable">0</property>
<property name="wrap-mode">word</property>
<property name="buffer">text_buffer_license</property>
<property name="accepts_tab">False</property>
<property name="accepts-tab">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkLinkButton" id="btn_url">
<property name="label" translatable="yes">https://slgobinath.github.io/SafeEyes</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="focus_on_click">False</property>
<property name="receives_default">True</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="focus-on-click">0</property>
<property name="receives-default">1</property>
<property name="halign">center</property>
<property name="relief">none</property>
<property name="has-frame">0</property>
<property name="uri">https://slgobinath.github.io/SafeEyes</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSeparator" id="separator">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="visible">1</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox" id="buttonbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<object class="GtkBox" id="buttonbox">
<property name="visible">1</property>
<property name="valign">start</property>
<property name="margin_right">5</property>
<property name="layout_style">end</property>
<property name="margin-end">5</property>
<property name="halign">end</property>
<child>
<object class="GtkButton" id="btn_close">
<property name="label" translatable="yes">Close</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_close_clicked" swapped="no"/>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="receives-default">1</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<!--
~ Safe Eyes is a utility to remind you to take break frequently
~ to protect your eyes from eye strain.
@ -20,115 +19,84 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<interface>
<requires lib="gtk+" version="3.12"/>
<requires lib="gtk" version="4.0"/>
<object class="GtkWindow" id="window_main">
<property name="can_focus">False</property>
<property name="window_position">center</property>
<property name="hide_titlebar_when_maximized">True</property>
<property name="icon_name">safeeyes</property>
<property name="skip_taskbar_hint">True</property>
<property name="urgency_hint">True</property>
<property name="focus_on_map">False</property>
<property name="decorated">False</property>
<property name="deletable">False</property>
<property name="gravity">center</property>
<signal name="delete-event" handler="on_window_delete" swapped="no"/>
<property name="decorated">0</property>
<property name="deletable">0</property>
<child>
<placeholder/>
</child>
<child>
<property name="child">
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="row_homogeneous">True</property>
<property name="column_homogeneous">True</property>
<property name="row_homogeneous">1</property>
<property name="column_homogeneous">1</property>
<child>
<object class="GtkBox" id="box_center_parent">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">10</property>
<child>
<object class="GtkGrid" id="grid_central">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="row_spacing">10</property>
<child>
<object class="GtkImage" id="img_break">
<property name="visible">True</property>
<property name="can_focus">False</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkGrid" id="grid_parent">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="hexpand">1</property>
<property name="row_spacing">15</property>
<child>
<object class="GtkLabel" id="lbl_message">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Hello World</property>
<property name="label" translatable="1">Hello World</property>
<property name="justify">center</property>
<style>
<class name="lbl_message"/>
</style>
<layout>
<property name="column">0</property>
<property name="row">0</property>
<property name="column-span">3</property>
</layout>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">3</property>
</packing>
</child>
<child>
<object class="GtkAlignment" id="alignment_button">
<property name="visible">True</property>
<property name="can_focus">False</property>
<object class="GtkLabel" id="lbl_count">
<property name="halign">center</property>
<property name="yscale">0.20000000298023224</property>
<child>
<object class="GtkLabel" id="lbl_count">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">00</property>
<style>
<class name="lbl_count"/>
</style>
</object>
</child>
<property name="label" translatable="1">00</property>
<style>
<class name="lbl_count"/>
</style>
<layout>
<property name="column">1</property>
<property name="row">2</property>
</layout>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box_buttons">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">center</property>
<property name="spacing">50</property>
<property name="homogeneous">True</property>
<property name="homogeneous">1</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<layout>
<property name="column">1</property>
<property name="row">3</property>
</layout>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<placeholder/>
@ -151,89 +119,62 @@
<child>
<placeholder/>
</child>
<layout>
<property name="column">0</property>
<property name="row">1</property>
<property name="row-span">3</property>
</layout>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="height">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_widget">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Widget</property>
<property name="vexpand">1</property>
<property name="label" translatable="1">Widget</property>
<property name="yalign">0.25</property>
<style>
<class name="lbl_widget"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
<layout>
<property name="column">0</property>
<property name="row">1</property>
<property name="row-span">2</property>
</layout>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="height">2</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box_top_panel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkToolbar" id="toolbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<object class="GtkBox" id="toolbar">
<property name="css-classes">toolbar</property>
<property name="can_focus">0</property>
<property name="halign">end</property>
<property name="valign">start</property>
<property name="toolbar_style">icons</property>
<property name="icon_size">2</property>
<style>
<class name="toolbar"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_top">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="vexpand">1</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<style>
<class name="box_top_panel"/>
</style>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
</object>
</child>
</property>
<style>
<class name="window_main"/>
</style>

View File

@ -20,42 +20,31 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<interface>
<requires lib="gtk+" version="3.12"/>
<requires lib="gtk" version="4.0"/>
<object class="GtkBox" id="box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="visible">1</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">10</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkLabel" id="lbl_name">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="valign">center</property>
<property name="halign">start</property>
<property name="label" translatable="yes">label</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="switch_value">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
</interface>

View File

@ -20,76 +20,49 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkImage" id="img_properties">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-properties</property>
</object>
<object class="GtkImage" id="img_delete">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-delete</property>
</object>
<requires lib="gtk" version="4.0"/>
<object class="GtkBox" id="box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="visible">1</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">3</property>
<property name="vexpand">0</property>
<child>
<object class="GtkLabel" id="lbl_name">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="valign">center</property>
<property name="label" translatable="yes">label</property>
<property name="xalign">0</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_properties">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="receives-default">1</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="image">img_properties</property>
<property name="always_show_image">True</property>
<property name="icon-name">gtk-properties</property>
<style>
<class name="btn_circle"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_delete">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="image">img_delete</property>
<property name="always_show_image">True</property>
<property name="icon-name">edit-delete</property>
<style>
<class name="btn_circle"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</interface>

View File

@ -20,47 +20,37 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<interface>
<requires lib="gtk+" version="3.12"/>
<requires lib="gtk" version="4.0"/>
<object class="GtkAdjustment" id="adjustment_value">
<property name="upper">100</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkBox" id="box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="visible">1</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">10</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkLabel" id="lbl_name">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="visible">1</property>
<property name="valign">center</property>
<property name="label" translatable="yes">label</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spin_value">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="adjustment">adjustment_value</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</interface>

View File

@ -20,127 +20,88 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkImage" id="img_properties">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-properties</property>
</object>
<requires lib="gtk" version="4.0"/>
<object class="GtkBox" id="box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="visible">1</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="vexpand">0</property>
<child>
<object class="GtkImage" id="img_plugin_icon">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="stock">gtk-about</property>
<property name="icon-name">gtk-about</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="visible">1</property>
<property name="margin-start">5</property>
<property name="orientation">vertical</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<child>
<object class="GtkLabel" id="lbl_plugin_name">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="halign">start</property>
<property name="valign">end</property>
<property name="label" translatable="yes">Plugin Name</property>
<property name="xalign">0.05000000074505806</property>
<property name="yalign">1</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<style>
<class name="lbl_plugin_name"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_plugin_description">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="halign">start</property>
<property name="valign">start</property>
<property name="label" translatable="yes">Plugin Description</property>
<property name="xalign">0.05000000074505806</property>
<property name="yalign">0</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<style>
<class name="lbl_plugin_description"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="spacing">5</property>
<child>
<object class="GtkSwitch" id="switch_enable">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_properties">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<!-- TODO: check that this is right, had packing:fill 0 -->
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="receives-default">1</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="image">img_properties</property>
<property name="always_show_image">True</property>
<property name="icon-name">gtk-properties</property>
<style>
<class name="btn_circle"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</interface>

View File

@ -20,41 +20,31 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<interface>
<requires lib="gtk+" version="3.12"/>
<requires lib="gtk" version="4.0"/>
<object class="GtkBox" id="box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="visible">1</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">10</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkLabel" id="lbl_name">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="valign">center</property>
<property name="halign">start</property>
<property name="label" translatable="yes">label</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="txt_value">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</interface>

View File

@ -20,11 +20,11 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<interface>
<requires lib="gtk+" version="3.12"/>
<requires lib="gtk" version="4.0"/>
<object class="GtkAdjustment" id="adjustment_duration">
<property name="upper">100</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkListStore" id="lst_break_types">
<columns>
@ -41,110 +41,69 @@
</data>
</object>
<object class="GtkWindow" id="dialog_new_break">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Properties</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="window_position">center-on-parent</property>
<property name="default_width">500</property>
<property name="default_height">50</property>
<property name="destroy_with_parent">True</property>
<property name="icon_name">safeeyes</property>
<property name="type_hint">dialog</property>
<property name="skip_taskbar_hint">True</property>
<property name="gravity">center</property>
<signal name="delete-event" handler="on_window_delete" swapped="no"/>
<property name="resizable">0</property>
<property name="modal">1</property>
<property name="default-width">500</property>
<property name="default-height">50</property>
<property name="destroy-with-parent">1</property>
<property name="icon-name">safeeyes</property>
<child>
<object class="GtkBox" id="box_settings">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">10</property>
<property name="margin_right">10</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
<property name="visible">1</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">10</property>
<property name="margin-bottom">10</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkFrame" id="frame2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="visible">1</property>
<child>
<object class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">12</property>
<object class="GtkBox" id="box6">
<property name="visible">1</property>
<property name="margin-start">12</property>
<property name="margin-end">10</property>
<property name="margin-top">5</property>
<property name="margin-bottom">10</property>
<property name="orientation">vertical</property>
<property name="spacing">3</property>
<child>
<object class="GtkBox" id="box6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_right">10</property>
<property name="margin_top">5</property>
<property name="margin_bottom">10</property>
<property name="orientation">vertical</property>
<property name="spacing">3</property>
<object class="GtkEntry" id="txt_break">
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="valign">center</property>
<property name="width-chars">64</property>
</object>
</child>
<child>
<object class="GtkBox" id="box7">
<property name="visible">1</property>
<property name="spacing">10</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkEntry" id="txt_break">
<property name="visible">True</property>
<property name="can_focus">True</property>
<object class="GtkLabel" id="lbl_duration3">
<property name="visible">1</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="width_chars">64</property>
<property name="label" translatable="yes">Type</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">10</property>
<object class="GtkComboBox" id="cmb_type">
<property name="halign">end</property>
<property name="visible">1</property>
<property name="model">lst_break_types</property>
<property name="active">0</property>
<property name="id-column">0</property>
<child>
<object class="GtkLabel" id="lbl_duration3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Type</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="cmb_type">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">lst_break_types</property>
<property name="active">0</property>
<property name="id_column">0</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext1"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
<object class="GtkCellRendererText" id="cellrenderertext1"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
@ -152,61 +111,36 @@
</child>
<child type="label">
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="label" translatable="yes">Break</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButtonBox" id="buttonbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<object class="GtkBox" id="buttonbox1">
<property name="visible">1</property>
<property name="spacing">10</property>
<property name="homogeneous">True</property>
<property name="baseline_position">top</property>
<property name="layout_style">end</property>
<property name="homogeneous">1</property>
<property name="baseline-position">top</property>
<property name="halign">end</property>
<child>
<object class="GtkButton" id="btn_discard">
<property name="label">Discard</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="discard" swapped="no"/>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="receives-default">1</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_save">
<property name="label" translatable="yes">Save</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="save" swapped="no"/>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="receives-default">1</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">3</property>
</packing>
</child>
</object>
</child>

View File

@ -20,23 +20,18 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<interface>
<requires lib="gtk+" version="3.12"/>
<requires lib="gtk" version="4.0"/>
<object class="GtkAdjustment" id="adjustment_duration">
<property name="lower">1</property>
<property name="upper">3600</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustment_interval">
<property name="lower">1</property>
<property name="upper">120</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkImage" id="img_break">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-missing-image</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkListStore" id="lst_break_types">
<columns>
@ -53,152 +48,93 @@
</data>
</object>
<object class="GtkWindow" id="dialog_settings_break">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Properties</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="window_position">center-on-parent</property>
<property name="default_width">500</property>
<property name="default_height">50</property>
<property name="destroy_with_parent">True</property>
<property name="icon_name">safeeyes</property>
<property name="type_hint">dialog</property>
<property name="skip_taskbar_hint">True</property>
<property name="gravity">center</property>
<signal name="delete-event" handler="on_window_delete" swapped="no"/>
<child>
<placeholder/>
</child>
<property name="resizable">0</property>
<property name="modal">1</property>
<property name="default-width">500</property>
<property name="default-height">50</property>
<property name="destroy-with-parent">1</property>
<property name="icon-name">safeeyes</property>
<child>
<object class="GtkBox" id="box_settings">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">10</property>
<property name="margin_right">10</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
<property name="visible">1</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">10</property>
<property name="margin-bottom">10</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkFrame" id="frame2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="visible">1</property>
<child>
<object class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">12</property>
<object class="GtkBox" id="box6">
<property name="visible">1</property>
<property name="margin-start">12</property>
<property name="margin-end">10</property>
<property name="margin-top">5</property>
<property name="margin-bottom">10</property>
<property name="orientation">vertical</property>
<property name="spacing">3</property>
<child>
<object class="GtkBox" id="box6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_right">10</property>
<property name="margin_top">5</property>
<property name="margin_bottom">10</property>
<property name="orientation">vertical</property>
<property name="spacing">3</property>
<object class="GtkEntry" id="txt_break">
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="valign">center</property>
</object>
</child>
<child>
<object class="GtkBox" id="box7">
<property name="visible">1</property>
<property name="spacing">10</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkEntry" id="txt_break">
<property name="visible">True</property>
<property name="can_focus">True</property>
<object class="GtkLabel" id="lbl_duration3">
<property name="visible">1</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Type</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">10</property>
<object class="GtkComboBox" id="cmb_type">
<property name="visible">1</property>
<property name="model">lst_break_types</property>
<property name="active">0</property>
<property name="id-column">0</property>
<property name="halign">end</property>
<child>
<object class="GtkLabel" id="lbl_duration3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Type</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="cmb_type">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">lst_break_types</property>
<property name="active">0</property>
<property name="id_column">0</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext1"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
<object class="GtkCellRendererText" id="cellrenderertext1"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="box8">
<property name="visible">1</property>
<property name="spacing">10</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkLabel" id="lbl_duration4">
<property name="visible">1</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Image</property>
</object>
</child>
<child>
<object class="GtkBox" id="box8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">10</property>
<child>
<object class="GtkLabel" id="lbl_duration4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Image</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_image">
<property name="label" translatable="yes">Select</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="image">img_break</property>
<property name="always_show_image">True</property>
<signal name="clicked" handler="select_image" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
<object class="GtkButton" id="btn_image">
<property name="halign">end</property>
<property name="label" translatable="yes">Select</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="receives-default">1</property>
<property name="icon-name">gtk-missing-image</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
@ -206,377 +142,208 @@
</child>
<child type="label">
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="label" translatable="yes">Break</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="visible">1</property>
<child>
<object class="GtkAlignment" id="alignment4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">12</property>
<child>
<object class="GtkBox" id="box9">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_right">10</property>
<property name="margin_top">5</property>
<property name="margin_bottom">10</property>
<property name="visible">1</property>
<property name="margin-start">12</property>
<property name="margin-end">10</property>
<property name="margin-top">5</property>
<property name="margin-bottom">10</property>
<property name="orientation">vertical</property>
<property name="spacing">3</property>
<child>
<object class="GtkBox" id="box10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="spacing">10</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkLabel" id="lbl_duration5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Override</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="switch_override_interval">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box11">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="spacing">100</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkLabel" id="lbl_duration6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Time (in minutes)</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spin_interval">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">adjustment_interval</property>
<property name="numeric">True</property>
<property name="numeric">1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="label" translatable="yes">Time to wait</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="visible">1</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">12</property>
<child>
<object class="GtkBox" id="box2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_right">10</property>
<property name="margin_top">5</property>
<property name="margin_bottom">10</property>
<property name="visible">1</property>
<property name="margin-start">12</property>
<property name="margin-end">10</property>
<property name="margin-top">5</property>
<property name="margin-bottom">10</property>
<property name="orientation">vertical</property>
<property name="spacing">3</property>
<child>
<object class="GtkBox" id="box4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="spacing">10</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkLabel" id="lbl_duration1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Override</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="switch_override_duration">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="spacing">100</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkLabel" id="lbl_duration">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Time (in seconds)</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spin_duration">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="adjustment">adjustment_duration</property>
<property name="numeric">True</property>
<property name="numeric">1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="label" translatable="yes">Duration</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="visible">1</property>
<child>
<object class="GtkAlignment" id="alignment3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">12</property>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">5</property>
<property name="margin_bottom">10</property>
<property name="visible">1</property>
<property name="margin-start">12</property>
<property name="margin-top">5</property>
<property name="margin-bottom">10</property>
<property name="orientation">vertical</property>
<property name="spacing">3</property>
<child>
<object class="GtkBox" id="box5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_right">10</property>
<property name="margin_top">5</property>
<property name="margin_bottom">10</property>
<property name="visible">1</property>
<property name="margin-end">10</property>
<property name="margin-top">5</property>
<property name="margin-bottom">10</property>
<property name="spacing">10</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkLabel" id="lbl_duration2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Override</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="switch_override_plugins">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkGrid" id="grid_plugins">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_right">10</property>
<property name="margin_bottom">10</property>
<property name="row_homogeneous">True</property>
<property name="column_homogeneous">True</property>
<child>
<placeholder/>
</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>
<property name="visible">1</property>
<property name="margin-end">10</property>
<property name="margin-bottom">10</property>
<property name="row-homogeneous">1</property>
<property name="column-homogeneous">1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="label" translatable="yes">Plugins</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">3</property>
</packing>
</child>
</object>
</child>

File diff suppressed because it is too large Load Diff

View File

@ -20,39 +20,23 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<interface>
<requires lib="gtk+" version="3.12"/>
<requires lib="gtk" version="4.0"/>
<object class="GtkWindow" id="dialog_settings_plugin">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Properties</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="window_position">center-on-parent</property>
<property name="default_width">400</property>
<property name="default_height">10</property>
<property name="destroy_with_parent">True</property>
<property name="icon_name">safeeyes</property>
<property name="type_hint">dialog</property>
<property name="skip_taskbar_hint">True</property>
<property name="gravity">center</property>
<signal name="delete-event" handler="on_window_delete" swapped="no"/>
<property name="resizable">0</property>
<property name="modal">1</property>
<property name="default-width">400</property>
<property name="default-height">10</property>
<property name="destroy-with-parent">1</property>
<property name="icon-name">safeeyes</property>
<child>
<object class="GtkBox" id="box_settings">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
<property name="visible">1</property>
<property name="margin-top">10</property>
<property name="margin-bottom">10</property>
<property name="orientation">vertical</property>
<property name="spacing">15</property>
<property name="homogeneous">True</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<property name="homogeneous">1</property>
</object>
</child>
</object>

View File

@ -25,6 +25,10 @@ import random
from distutils.version import LooseVersion
from enum import Enum
import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk
from safeeyes import utility
@ -397,7 +401,8 @@ class TrayAction:
def get_icon(self):
if self.system_icon:
return self.__icon
image = Gtk.Image.new_from_icon_name(self.__icon)
return image
else:
image = utility.load_and_scale_image(self.__icon, 16, 16)
image.show()

View File

@ -24,7 +24,7 @@ Comment[ta]=உங்கள் கண்களை சோர்வடையாத
Comment[tr]=Gözünüzü yorgunluğa karşı koruyun
Comment[uk]=Захистіть свої очі від втоми
Comment[vi]=Bảo vệ đôi mắt của bạn khỏi sự mệt mỏi
Exec=env GDK_BACKEND=x11 safeeyes
Exec=safeeyes
Icon=io.github.slgobinath.SafeEyes
Terminal=false
Type=Application

View File

@ -27,7 +27,7 @@ import re
import subprocess
import gi
gi.require_version('Gdk', '3.0')
gi.require_version('Gdk', '4.0')
from gi.repository import Gdk
from gi.repository import GdkX11 # noqa F401
from safeeyes import utility

View File

@ -26,7 +26,7 @@ import dbus
import re
import gi
from safeeyes.model import TrayAction
gi.require_version('Gtk', '3.0')
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk
tray_icon_path = None
@ -74,5 +74,5 @@ def get_tray_action(break_obj):
if players:
return TrayAction.build("Pause media",
tray_icon_path,
Gtk.STOCK_MEDIA_PAUSE,
"media-playback-pause",
lambda: __pause_players(players))

View File

@ -26,7 +26,7 @@ import os
from safeeyes import utility
from safeeyes.model import TrayAction
gi.require_version('Gtk', '3.0')
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk
context = None
@ -131,5 +131,5 @@ def on_stop_break():
def get_tray_action(break_obj):
return TrayAction.build("Lock screen",
tray_icon_path,
Gtk.STOCK_DIALOG_AUTHENTICATION,
"dialog-password",
__lock_screen)

View File

@ -19,7 +19,7 @@
import datetime
from safeeyes.model import BreakType
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Gtk', '4.0')
try:
gi.require_version('AppIndicator3', '0.1')
from gi.repository import AppIndicator3 as appindicator

View File

@ -37,7 +37,7 @@ from safeeyes.plugin_manager import PluginManager
from safeeyes.core import SafeEyesCore
from safeeyes.ui.settings_dialog import SettingsDialog
gi.require_version('Gtk', '3.0')
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk, Gio
SAFE_EYES_VERSION = "2.1.6"

View File

@ -35,8 +35,11 @@ class AboutDialog:
def __init__(self, version):
builder = utility.create_gtk_builder(ABOUT_DIALOG_GLADE)
builder.connect_signals(self)
self.window = builder.get_object('window_about')
self.window.connect("close-request", self.on_window_delete)
builder.get_object('btn_close').connect('clicked', self.on_close_clicked)
builder.get_object('lbl_decription').set_label(_("Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you to take breaks while you're working long hours at the computer"))
builder.get_object('lbl_license').set_label(_('License') + ':')
@ -47,7 +50,7 @@ class AboutDialog:
"""
Show the About dialog.
"""
self.window.show_all()
self.window.present()
def on_window_delete(self, *args):
"""

View File

@ -27,7 +27,7 @@ from safeeyes import utility
from Xlib.display import Display
from Xlib.display import X
gi.require_version('Gtk', '3.0')
gi.require_version('Gtk', '4.0')
from gi.repository import Gdk
from gi.repository import GLib
from gi.repository import Gtk
@ -44,7 +44,10 @@ class BreakScreen:
def __init__(self, context, on_skipped, on_postponed, style_sheet_path):
self.context = context
self.count_labels = []
self.display = Display()
if not self.context['is_wayland']:
self.x11_display = Display()
self.enable_postpone = False
self.enable_shortcut = False
self.is_pretified = False
@ -59,7 +62,9 @@ class BreakScreen:
# Initialize the theme
css_provider = Gtk.CssProvider()
css_provider.load_from_path(style_sheet_path)
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
display = Gdk.Display.get_default()
Gtk.StyleContext.add_provider_for_display(display, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
def initialize(self, config):
"""
@ -131,7 +136,9 @@ class BreakScreen:
Hide the break screen from active window and destroy all other windows
"""
logging.info("Close the break screen(s)")
self.__release_keyboard()
if not self.context['is_wayland']:
self.__release_keyboard()
# Destroy other windows if exists
GLib.idle_add(lambda: self.__destroy_all_screens())
@ -149,25 +156,26 @@ class BreakScreen:
Show an empty break screen on all screens.
"""
# Lock the keyboard
utility.start_thread(self.__lock_keyboard)
if not self.context['is_wayland']:
utility.start_thread(self.__lock_keyboard_x11)
display = Gdk.Display.get_default()
screen = display.get_default_screen()
no_of_monitors = display.get_n_monitors()
logging.info("Show break screens in %d display(s)", no_of_monitors)
monitors = display.get_monitors()
logging.info("Show break screens in %d display(s)", len(monitors))
for monitor_num in range(no_of_monitors):
monitor = display.get_monitor(monitor_num)
i = 0
for monitor in monitors:
monitor_gemoetry = monitor.get_geometry()
x = monitor_gemoetry.x
y = monitor_gemoetry.y
builder = Gtk.Builder()
builder.add_from_file(BREAK_SCREEN_GLADE)
builder.connect_signals(self)
window = builder.get_object("window_main")
window.set_title("SafeEyes-" + str(monitor_num))
window.connect("close-request", self.on_window_delete)
window.set_title("SafeEyes-" + str(i))
lbl_message = builder.get_object("lbl_message")
lbl_count = builder.get_object("lbl_count")
lbl_widget = builder.get_object("lbl_widget")
@ -176,15 +184,14 @@ class BreakScreen:
toolbar = builder.get_object("toolbar")
for tray_action in tray_actions:
toolbar_button = None
if tray_action.system_icon:
toolbar_button = Gtk.ToolButton.new_from_stock(tray_action.get_icon())
else:
toolbar_button = Gtk.ToolButton.new(tray_action.get_icon(), tray_action.name)
# TODO: apparently, this would be better served with an icon theme + Gtk.button.new_from_icon_name
icon = tray_action.get_icon()
toolbar_button = Gtk.Button()
toolbar_button.set_child(icon)
tray_action.add_toolbar_button(toolbar_button)
toolbar_button.connect("clicked", lambda button, action: self.__tray_action(button, action), tray_action)
toolbar_button.set_tooltip_text(_(tray_action.name))
toolbar.add(toolbar_button)
toolbar.append(toolbar_button)
toolbar_button.show()
# Add the buttons
@ -194,7 +201,7 @@ class BreakScreen:
btn_postpone.get_style_context().add_class('btn_postpone')
btn_postpone.connect('clicked', self.on_postpone_clicked)
btn_postpone.set_visible(True)
box_buttons.pack_start(btn_postpone, True, True, 0)
box_buttons.append(btn_postpone)
if not self.strict_break:
# Add the skip button
@ -202,7 +209,7 @@ class BreakScreen:
btn_skip.get_style_context().add_class('btn_skip')
btn_skip.connect('clicked', self.on_skip_clicked)
btn_skip.set_visible(True)
box_buttons.pack_start(btn_skip, True, True, 0)
box_buttons.append(btn_skip)
# Set values
if image_path:
@ -213,23 +220,18 @@ class BreakScreen:
self.windows.append(window)
self.count_labels.append(lbl_count)
# Set visual to apply css theme. It should be called before show method.
window.set_visual(window.get_screen().get_rgba_visual())
if self.context['desktop'] == 'kde':
# Fix flickering screen in KDE by setting opacity to 1
window.set_opacity(0.9)
# In Unity, move the window before present
window.move(x, y)
window.resize(monitor_gemoetry.width, monitor_gemoetry.height)
window.stick()
window.set_keep_above(True)
window.fullscreen_on_monitor(screen, monitor_num)
window.fullscreen_on_monitor(monitor)
window.present()
# In other desktop environments, move the window after present
window.move(x, y)
window.resize(monitor_gemoetry.width, monitor_gemoetry.height)
logging.info("Moved break screen to Display[%d, %d]", x, y)
if self.context['is_wayland']:
# this may or may not be granted by the window system
window.get_surface().inhibit_system_shortcuts(None)
i = i + 1
def __update_count_down(self, count):
"""
@ -238,7 +240,7 @@ class BreakScreen:
for label in self.count_labels:
label.set_text(count)
def __lock_keyboard(self):
def __lock_keyboard_x11(self):
"""
Lock the keyboard to prevent the user from using keyboard shortcuts
"""
@ -246,15 +248,15 @@ class BreakScreen:
self.lock_keyboard = True
# Grab the keyboard
root = self.display.screen().root
root = self.x11_display.screen().root
root.change_attributes(event_mask=X.KeyPressMask | X.KeyReleaseMask)
root.grab_keyboard(True, X.GrabModeAsync, X.GrabModeAsync, X.CurrentTime)
# Consume keyboard events
while self.lock_keyboard:
if self.display.pending_events() > 0:
if self.x11_display.pending_events() > 0:
# Avoid waiting for next event by checking pending events
event = self.display.next_event()
event = self.x11_display.next_event()
if self.enable_shortcut and event.type == X.KeyPress:
if event.detail == self.keycode_shortcut_skip and not self.strict_break:
self.skip_break()
@ -266,14 +268,14 @@ class BreakScreen:
# Reduce the CPU usage by sleeping for a second
time.sleep(1)
def __release_keyboard(self):
def __release_keyboard_x11(self):
"""
Release the locked keyboard.
"""
logging.info("Unlock the keyboard")
self.lock_keyboard = False
self.display.ungrab_keyboard(X.CurrentTime)
self.display.flush()
self.x11_display.ungrab_keyboard(X.CurrentTime)
self.x11_display.flush()
def __destroy_all_screens(self):
"""

View File

@ -23,9 +23,9 @@ import gi
from safeeyes import utility
from safeeyes.model import Config
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import GdkPixbuf
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk, Gio
from gi.repository import GdkPixbuf, Gdk
SETTINGS_DIALOG_GLADE = os.path.join(utility.BIN_DIRECTORY, "glade/settings_dialog.glade")
@ -55,7 +55,6 @@ class SettingsDialog:
self.warn_bar_rpc_server_shown = False
builder = utility.create_gtk_builder(SETTINGS_DIALOG_GLADE)
builder.connect_signals(self)
self.window = builder.get_object('window_settings')
self.box_short_breaks = builder.get_object('box_short_breaks')
@ -80,18 +79,26 @@ class SettingsDialog:
self.info_bar_long_break.hide()
self.warn_bar_rpc_server.hide()
self.window.connect("close-request", self.on_window_delete)
builder.get_object('reset_menu').connect('clicked', self.on_reset_menu_clicked)
self.spin_short_break_interval.connect('value-changed', self.on_spin_short_break_interval_change)
self.info_bar_long_break.connect('close', self.on_info_bar_long_break_close)
self.info_bar_long_break.connect('response', self.on_info_bar_long_break_close)
self.spin_long_break_interval.connect('value-changed', self.on_spin_long_break_interval_change)
self.warn_bar_rpc_server.connect('close', self.on_warn_bar_rpc_server_close)
self.warn_bar_rpc_server.connect('response', self.on_warn_bar_rpc_server_close)
builder.get_object('btn_add_break').connect('clicked', self.add_break)
# Set the current values of input fields
self.__initialize(config)
# Update relative states
# GtkSwitch state-set signal is available only from 3.14
if Gtk.get_minor_version() >= 14:
# Add event listener to postpone switch
self.switch_postpone.connect('state-set', self.on_switch_postpone_activate)
self.on_switch_postpone_activate(self.switch_postpone, self.switch_postpone.get_active())
# Add event listener to RPC server switch
self.switch_rpc_server.connect('state-set', self.on_switch_rpc_server_activate)
self.on_switch_rpc_server_activate(self.switch_rpc_server, self.switch_rpc_server.get_active())
# Add event listener to postpone switch
self.switch_postpone.connect('state-set', self.on_switch_postpone_activate)
self.on_switch_postpone_activate(self.switch_postpone, self.switch_postpone.get_active())
# Add event listener to RPC server switch
self.switch_rpc_server.connect('state-set', self.on_switch_rpc_server_activate)
self.on_switch_rpc_server_activate(self.switch_rpc_server, self.switch_rpc_server.get_active())
self.initializing = False
def __initialize(self, config):
@ -103,7 +110,7 @@ class SettingsDialog:
self.__create_break_item(long_break, False)
for plugin_config in utility.load_plugins_config(config):
self.box_plugins.pack_start(self.__create_plugin_item(plugin_config), False, False, 0)
self.box_plugins.append(self.__create_plugin_item(plugin_config))
self.spin_short_break_duration.set_value(config.get('short_break_duration'))
self.spin_long_break_duration.set_value(config.get('long_break_duration'))
@ -152,57 +159,62 @@ class SettingsDialog:
)
)
box.set_visible(True)
parent_box.pack_start(box, False, False, 0)
parent_box.append(box)
return box
def on_reset_menu_clicked(self, button):
self.popover.hide()
def __confirmation_dialog_response(widget, response_id):
if response_id == Gtk.ResponseType.OK:
def __confirmation_dialog_response(dialog, result):
response_id = dialog.choose_finish(result)
if response_id == 1:
utility.reset_config()
self.config = Config()
# Remove breaks from the container
self.box_short_breaks.foreach(lambda element: self.box_short_breaks.remove(element))
self.box_long_breaks.foreach(lambda element: self.box_long_breaks.remove(element))
# Remove plugins from the container
self.box_plugins.foreach(lambda element: self.box_plugins.remove(element))
self.__clear_children(self.box_short_breaks)
self.__clear_children(self.box_long_breaks)
self.__clear_children(self.box_plugins)
# Initialize again
self.__initialize(self.config)
widget.destroy()
messagedialog = Gtk.MessageDialog(parent=self.window,
flags=Gtk.DialogFlags.MODAL,
type=Gtk.MessageType.WARNING,
buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
_("Reset"), Gtk.ResponseType.OK),
message_format=_("Are you sure you want to reset all settings to default?"))
messagedialog.connect("response", __confirmation_dialog_response)
messagedialog.format_secondary_text(_("You can't undo this action."))
messagedialog.show()
messagedialog = Gtk.AlertDialog()
messagedialog.set_modal(True)
messagedialog.set_buttons(['_Cancel', _("Reset")])
messagedialog.set_message(_("Are you sure you want to reset all settings to default?"))
messagedialog.set_detail(_("You can't undo this action."))
messagedialog.set_cancel_button(0)
messagedialog.set_default_button(0)
messagedialog.choose(self.window, None, __confirmation_dialog_response)
def __clear_children(self, widget):
while widget.get_last_child() is not None:
widget.remove(widget.get_last_child())
def __delete_break(self, break_config, is_short, on_remove):
"""
Remove the break after a confirmation.
"""
def __confirmation_dialog_response(widget, response_id):
if response_id == Gtk.ResponseType.OK:
def __confirmation_dialog_response(dialog, result):
response_id = dialog.choose_finish(result)
if response_id == 1:
if is_short:
self.config.get('short_breaks').remove(break_config)
else:
self.config.get('long_breaks').remove(break_config)
on_remove()
widget.destroy()
messagedialog = Gtk.MessageDialog(parent=self.window,
flags=Gtk.DialogFlags.MODAL,
type=Gtk.MessageType.WARNING,
buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
_("Delete"), Gtk.ResponseType.OK),
message_format=_("Are you sure you want to delete this break?"))
messagedialog.connect("response", __confirmation_dialog_response)
messagedialog.format_secondary_text(_("You can't undo this action."))
messagedialog.show()
messagedialog = Gtk.AlertDialog()
messagedialog.set_modal(True)
messagedialog.set_buttons(['_Cancel', _("Delete")])
messagedialog.set_message(_("Are you sure you want to delete this break?"))
messagedialog.set_detail(_("You can't undo this action."))
messagedialog.set_cancel_button(0)
messagedialog.set_default_button(0)
messagedialog.choose(self.window, None, __confirmation_dialog_response)
def __create_plugin_item(self, plugin_config):
"""
@ -254,7 +266,7 @@ class SettingsDialog:
"""
Show the SettingsDialog.
"""
self.window.show_all()
self.window.present()
def on_switch_postpone_activate(self, switch, state):
"""
@ -349,17 +361,18 @@ class PluginSettingsDialog:
self.property_controls = []
builder = utility.create_gtk_builder(SETTINGS_DIALOG_PLUGIN_GLADE)
builder.connect_signals(self)
self.window = builder.get_object('dialog_settings_plugin')
box_settings = builder.get_object('box_settings')
self.window.set_title(_('Plugin Settings'))
for setting in config.get('settings'):
if setting['type'].upper() == 'INT':
box_settings.pack_start(self.__load_int_item(setting['label'], setting['id'], setting['safeeyes_config'], setting.get('min', 0), setting.get('max', 120)), False, False, 0)
box_settings.append(self.__load_int_item(setting['label'], setting['id'], setting['safeeyes_config'], setting.get('min', 0), setting.get('max', 120)))
elif setting['type'].upper() == 'TEXT':
box_settings.pack_start(self.__load_text_item(setting['label'], setting['id'], setting['safeeyes_config']), False, False, 0)
box_settings.append(self.__load_text_item(setting['label'], setting['id'], setting['safeeyes_config']))
elif setting['type'].upper() == 'BOOL':
box_settings.pack_start(self.__load_bool_item(setting['label'], setting['id'], setting['safeeyes_config']), False, False, 0)
box_settings.append(self.__load_bool_item(setting['label'], setting['id'], setting['safeeyes_config']))
self.window.connect("close-request", self.on_window_delete)
def __load_int_item(self, name, key, settings, min_value, max_value):
"""
@ -413,7 +426,7 @@ class PluginSettingsDialog:
"""
Show the Properties dialog.
"""
self.window.show_all()
self.window.present()
class BreakSettingsDialog:
@ -431,7 +444,6 @@ class BreakSettingsDialog:
self.on_remove = on_remove
builder = utility.create_gtk_builder(SETTINGS_DIALOG_BREAK_GLADE)
builder.connect_signals(self)
self.window = builder.get_object('dialog_settings_break')
self.txt_break = builder.get_object('txt_break')
self.switch_override_interval = builder.get_object('switch_override_interval')
@ -439,7 +451,7 @@ class BreakSettingsDialog:
self.switch_override_plugins = builder.get_object('switch_override_plugins')
self.spin_interval = builder.get_object('spin_interval')
self.spin_duration = builder.get_object('spin_duration')
self.img_break = builder.get_object('img_break')
self.btn_image = builder.get_object('btn_image')
self.cmb_type = builder.get_object('cmb_type')
grid_plugins = builder.get_object('grid_plugins')
@ -477,7 +489,7 @@ class BreakSettingsDialog:
row = 0
col = 0
for plugin_id in plugin_map.keys():
chk_button = Gtk.CheckButton(_(plugin_map[plugin_id]))
chk_button = Gtk.CheckButton.new_with_label(_(plugin_map[plugin_id]))
self.plugin_check_buttons[plugin_id] = chk_button
grid_plugins.attach(chk_button, row, col, 1, 1)
if plugins_overriden:
@ -488,14 +500,21 @@ class BreakSettingsDialog:
if row > 2:
col += 1
row = 0
# GtkSwitch state-set signal is available only from 3.14
if Gtk.get_minor_version() >= 14:
self.switch_override_interval.connect('state-set', self.on_switch_override_interval_activate)
self.switch_override_duration.connect('state-set', self.on_switch_override_duration_activate)
self.switch_override_plugins.connect('state-set', self.on_switch_override_plugins_activate)
self.on_switch_override_interval_activate(self.switch_override_interval, self.switch_override_interval.get_active())
self.on_switch_override_duration_activate(self.switch_override_duration, self.switch_override_duration.get_active())
self.on_switch_override_plugins_activate(self.switch_override_plugins, self.switch_override_plugins.get_active())
if 'image' in self.break_config:
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(self.break_config['image'], 16, 16, True)
image = Gtk.Image.new_from_pixbuf(pixbuf)
self.btn_image.set_child(image)
self.window.connect("close-request", self.on_window_delete)
self.btn_image.connect('clicked', self.select_image)
self.switch_override_interval.connect('state-set', self.on_switch_override_interval_activate)
self.switch_override_duration.connect('state-set', self.on_switch_override_duration_activate)
self.switch_override_plugins.connect('state-set', self.on_switch_override_plugins_activate)
self.on_switch_override_interval_activate(self.switch_override_interval, self.switch_override_interval.get_active())
self.on_switch_override_duration_activate(self.switch_override_duration, self.switch_override_duration.get_active())
self.on_switch_override_plugins_activate(self.switch_override_plugins, self.switch_override_plugins.get_active())
def on_switch_override_interval_activate(self, switch_button, state):
"""
@ -520,24 +539,36 @@ class BreakSettingsDialog:
"""
Show a file chooser dialog and let the user to select an image.
"""
dialog = Gtk.FileChooserDialog(_('Please select an image'), self.window, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
dialog = Gtk.FileDialog()
dialog.set_title(_('Please select an image'))
png_filter = Gtk.FileFilter()
png_filter.set_name("PNG files")
png_filter.add_mime_type("image/png")
png_filter.add_pattern("*.png")
dialog.add_filter(png_filter)
filters = Gio.ListStore.new(Gtk.FileFilter)
filters.append(png_filter)
dialog.set_filters(filters)
response = dialog.run()
if response == Gtk.ResponseType.OK:
self.break_config['image'] = dialog.get_filename()
dialog.open(self.window, None, self.select_image_callback)
def select_image_callback(self, dialog, result):
response = None
try:
response = dialog.open_finish(result)
except Exception:
# user pressing "Cancel" throws a generic exception here
pass
if response is not None:
self.break_config['image'] = response.get_path()
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(self.break_config['image'], 16, 16, True)
self.img_break.set_from_pixbuf(pixbuf)
elif response == Gtk.ResponseType.CANCEL:
image = Gtk.Image.new_from_pixbuf(pixbuf)
self.btn_image.set_child(image)
else:
self.break_config.pop('image', None)
self.img_break.set_from_stock('gtk-missing-image', Gtk.IconSize.BUTTON)
dialog.destroy()
self.btn_image.set_icon_name('gtk-missing-image')
def on_window_delete(self, *args):
"""
@ -583,7 +614,7 @@ class BreakSettingsDialog:
"""
Show the Properties dialog.
"""
self.window.show_all()
self.window.present()
class NewBreakDialog:
@ -596,7 +627,6 @@ class NewBreakDialog:
self.on_add = on_add
builder = utility.create_gtk_builder(SETTINGS_DIALOG_NEW_BREAK_GLADE)
builder.connect_signals(self)
self.window = builder.get_object('dialog_new_break')
self.txt_break = builder.get_object('txt_break')
self.cmb_type = builder.get_object('cmb_type')
@ -605,6 +635,10 @@ class NewBreakDialog:
list_types[0][0] = _(list_types[0][0])
list_types[1][0] = _(list_types[1][0])
self.window.connect("close-request", self.on_window_delete)
builder.get_object('btn_discard').connect('clicked', self.discard)
builder.get_object('btn_save').connect('clicked', self.save)
# Set the values
self.window.set_title(_('New Break'))
@ -638,4 +672,4 @@ class NewBreakDialog:
"""
Show the Properties dialog.
"""
self.window.show_all()
self.window.present()

View File

@ -39,12 +39,12 @@ from pathlib import Path
import babel.core
import babel.dates
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk
from gi.repository import GLib
from gi.repository import GdkPixbuf
gi.require_version('Gdk', '3.0')
gi.require_version('Gdk', '4.0')
BIN_DIRECTORY = os.path.dirname(os.path.realpath(__file__))
HOME_DIRECTORY = os.environ.get('HOME') or os.path.expanduser('~')
@ -660,7 +660,7 @@ def create_gtk_builder(glade_file):
builder.add_from_file(glade_file)
# Tranlslate all sub components
for obj in builder.get_objects():
if (not isinstance(obj, Gtk.SeparatorMenuItem)) and hasattr(obj, "get_label"):
if hasattr(obj, "get_label"):
label = obj.get_label()
if label is not None:
obj.set_label(_(label))