gui/window: Track focus widget when showing event preview
Store a weak pointer to whatever widget triggered the preview, and restore when the popover is closed. This should fix the focused list box row issue.
This commit is contained in:
@@ -125,6 +125,8 @@ struct _GcalWindow
|
|||||||
GcalEventEditorDialog *event_editor;
|
GcalEventEditorDialog *event_editor;
|
||||||
GtkWidget *import_dialog;
|
GtkWidget *import_dialog;
|
||||||
|
|
||||||
|
GtkWidget *last_focused_widget;
|
||||||
|
|
||||||
/* new event popover widgets */
|
/* new event popover widgets */
|
||||||
GtkWidget *quick_add_popover;
|
GtkWidget *quick_add_popover;
|
||||||
|
|
||||||
@@ -756,6 +758,12 @@ event_preview_cb (GcalEventWidget *event_widget,
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (self->last_focused_widget)
|
||||||
|
{
|
||||||
|
gtk_root_set_focus (GTK_ROOT (self), self->last_focused_widget);
|
||||||
|
g_clear_weak_pointer (&self->last_focused_widget);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -769,6 +777,10 @@ event_activated (GcalView *view,
|
|||||||
GcalEventWidget *event_widget,
|
GcalEventWidget *event_widget,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
GcalWindow *self = GCAL_WINDOW (user_data);
|
||||||
|
|
||||||
|
g_set_weak_pointer (&self->last_focused_widget, gtk_root_get_focus (GTK_ROOT (self)));
|
||||||
|
|
||||||
gcal_event_widget_show_preview (event_widget, event_preview_cb, user_data);
|
gcal_event_widget_show_preview (event_widget, event_preview_cb, user_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1011,6 +1023,8 @@ gcal_window_dispose (GObject *object)
|
|||||||
g_clear_pointer (&self->quick_add_popover, gtk_widget_unparent);
|
g_clear_pointer (&self->quick_add_popover, gtk_widget_unparent);
|
||||||
g_clear_pointer (&self->import_dialog, gtk_widget_unparent);
|
g_clear_pointer (&self->import_dialog, gtk_widget_unparent);
|
||||||
|
|
||||||
|
g_clear_weak_pointer (&self->last_focused_widget);
|
||||||
|
|
||||||
if (self->delete_event_toast)
|
if (self->delete_event_toast)
|
||||||
adw_toast_dismiss (self->delete_event_toast);
|
adw_toast_dismiss (self->delete_event_toast);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user