diff --git a/app/ui/timers.glade b/app/ui/timers.glade index 876c8472..58ee3697 100644 --- a/app/ui/timers.glade +++ b/app/ui/timers.glade @@ -855,6 +855,62 @@ Author: Dmitriy Yefremov + + True + False + gtk-add + + + True + False + + + Add + True + False + popup_menu_add_image + False + + + + + + + True + False + + + + + gtk-edit + True + False + False + True + True + + + + + + + True + False + + + + + gtk-remove + True + False + False + True + True + + + + + @@ -1095,7 +1151,7 @@ Author: Dmitriy Yefremov True both 3 - + diff --git a/app/ui/timers.py b/app/ui/timers.py index cd79c693..53c212c6 100644 --- a/app/ui/timers.py +++ b/app/ui/timers.py @@ -31,8 +31,9 @@ from datetime import datetime, timedelta from enum import Enum from urllib.parse import quote +from app.ui.main_helper import on_popup_menu from .dialogs import get_builder, get_message, show_dialog, DialogType -from .uicommons import Gtk, Gdk, GLib, UI_RESOURCES_PATH, Page, Column, KeyboardKey, IS_GNOME_SESSION +from .uicommons import Gtk, Gdk, GLib, UI_RESOURCES_PATH, Page, Column, KeyboardKey, IS_GNOME_SESSION, MOD_MASK from ..commons import run_idle, log from ..connections import HttpAPI from ..eparser.ecommons import BqServiceType @@ -170,7 +171,10 @@ class TimerTool(Gtk.Box): return "&".join(args) def on_timer_begins_set(self, action, value=None): - self.set_begins_date(self.get_begins_date()) + b_date = self.get_begins_date() + if b_date > self.get_ends_date(): + self.set_ends_date(b_date + timedelta(hours=1)) + self.set_begins_date(b_date) def on_timer_ends_set(self, action, value=None): self.set_ends_date(self.get_ends_date()) @@ -290,11 +294,14 @@ class TimerTool(Gtk.Box): "on_timer_cursor_changed": self.on_timer_cursor_changed, "on_timers_drag_data_received": self.on_timers_drag_data_received} - builder = get_builder(f"{UI_RESOURCES_PATH}timers.glade", handlers, objects=("timers_frame", "timer_model")) + builder = get_builder(f"{UI_RESOURCES_PATH}timers.glade", handlers, + objects=("timers_frame", "timer_model", "popup_menu", "popup_menu_add_image")) self._view = builder.get_object("timer_view") self._remove_button = builder.get_object("timer_remove_button") self._remove_button.bind_property("sensitive", builder.get_object("timer_edit_button"), "sensitive") + self._remove_button.bind_property("sensitive", builder.get_object("edit_menu_item"), "sensitive") + self._remove_button.bind_property("sensitive", builder.get_object("remove_menu_item"), "sensitive") self._info_button = builder.get_object("timer_info_check_button") self._info_button.bind_property("active", builder.get_object("timer_info_frame"), "visible") self._info_enabled_switch = builder.get_object("timer_info_enabled_switch") @@ -446,9 +453,11 @@ class TimerTool(Gtk.Box): self._app.send_http_request(HttpAPI.Request.TIMER, ref, callback) yield True - def on_timers_press(self, view, event): - if event.get_event_type() == Gdk.EventType.DOUBLE_BUTTON_PRESS and len(view.get_model()) > 0: + def on_timers_press(self, menu, event): + if event.get_event_type() == Gdk.EventType.DOUBLE_BUTTON_PRESS and len(self._view.get_model()) > 0: self.on_timer_edit() + else: + on_popup_menu(menu, event) def on_timers_key_press(self, view, event): key_code = event.hardware_keycode @@ -456,8 +465,14 @@ class TimerTool(Gtk.Box): return key = KeyboardKey(key_code) + ctrl = event.state & MOD_MASK + if key is KeyboardKey.DELETE: self.on_timer_remove() + elif key is KeyboardKey.INSERT: + self.on_timer_add() + elif ctrl and key is KeyboardKey.E: + self.on_timer_edit() def on_timer_cursor_changed(self, view): path, column = view.get_cursor()