From 34f9f71d62f2de5105a024f41a2c668fb592e976 Mon Sep 17 00:00:00 2001 From: S4NKALP Date: Tue, 28 Jul 2026 10:23:04 +0545 Subject: [PATCH] feat: update date widget --- src/window/desktop/date.py | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/window/desktop/date.py b/src/window/desktop/date.py index 26d021a..e49afd8 100644 --- a/src/window/desktop/date.py +++ b/src/window/desktop/date.py @@ -4,6 +4,28 @@ from fabric.widgets.datetime import DateTime from window.desktop.registry import DesktopWidgetRegistry +class _DraggableDateTime(DateTime): + """DateTime subclass that lets button-press events propagate to the parent + EventBox so GTK drag-and-drop works across the entire widget area. + + GtkButton's class handler (do_button_press_event) returns True at + G_SIGNAL_RUN_FIRST, which stops the accumulator before DateTime's own + connected handler ever runs. Both must return False for the event to + reach the EventBox where drag_source_set lives. + """ + + def do_button_press_event(self, event): + match event.button: + case 1: + self.do_cycle_next() + case 3: + self.do_cycle_prev() + return False + + def do_handle_press(self, _widget, _event, *_args): + return False + + class DesktopDateWidget(Box): def __init__(self, **kwargs): super().__init__( @@ -24,9 +46,13 @@ class DesktopDateWidget(Box): # Since this is just a date widget, we increase the interval to 100000ms (100 seconds) # which easily avoids the continuous redraw glitch while keeping the date accurate. date_interval = 100000 - self.dateone = DateTime(formatters=["%a"], interval=date_interval, name="day") - self.datetwo = DateTime(formatters=["%b"], interval=date_interval, name="month") - self.datethree = DateTime( + self.dateone = _DraggableDateTime( + formatters=["%a"], interval=date_interval, name="day" + ) + self.datetwo = _DraggableDateTime( + formatters=["%b"], interval=date_interval, name="month" + ) + self.datethree = _DraggableDateTime( formatters=["%-d"], interval=date_interval, name="date" ) self.top.add(self.dateone)