From d9c897c8b91165f95f011d44f2fea731b4b7eb16 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 10 Nov 2021 15:32:18 -0300 Subject: [PATCH] screencast: Trivial style cleanups Move some code around, and cleanup some of the styling. It's getting increasingly harder to follow these files, so start this series of cleanups with them. --- src/screencast.c | 30 ++-- src/screencastdialog.c | 62 +++---- src/screencastdialog.h | 2 +- src/screencastwidget.c | 356 +++++++++++++++++++++-------------------- src/screencastwidget.h | 10 +- 5 files changed, 238 insertions(+), 222 deletions(-) diff --git a/src/gnomescreencast.c b/src/gnomescreencast.c index fd80ca7..abf5b53 100644 --- a/src/gnomescreencast.c +++ b/src/gnomescreencast.c @@ -473,6 +473,7 @@ gnome_screen_cast_session_record_selections (GnomeScreenCastSession *gnome_scree select, error)) return FALSE; + break; } } diff --git a/src/screencast.c b/src/screencast.c index 27d8946..38d1d05 100644 --- a/src/screencast.c +++ b/src/screencast.c @@ -572,21 +572,6 @@ on_gnome_screen_cast_disabled (GDBusConnection *connection, } } -gboolean -screen_cast_init (GDBusConnection *connection, - GError **error) -{ - impl_connection = connection; - gnome_screen_cast = gnome_screen_cast_new (connection); - - g_signal_connect (gnome_screen_cast, "enabled", - G_CALLBACK (on_gnome_screen_cast_enabled), NULL); - g_signal_connect (gnome_screen_cast, "disabled", - G_CALLBACK (on_gnome_screen_cast_disabled), NULL); - - return TRUE; -} - static void screen_cast_session_close (Session *session) { @@ -636,3 +621,18 @@ screen_cast_session_class_init (ScreenCastSessionClass *klass) session_class = (SessionClass *)klass; session_class->close = screen_cast_session_close; } + +gboolean +screen_cast_init (GDBusConnection *connection, + GError **error) +{ + impl_connection = connection; + gnome_screen_cast = gnome_screen_cast_new (connection); + + g_signal_connect (gnome_screen_cast, "enabled", + G_CALLBACK (on_gnome_screen_cast_enabled), NULL); + g_signal_connect (gnome_screen_cast, "disabled", + G_CALLBACK (on_gnome_screen_cast_disabled), NULL); + + return TRUE; +} diff --git a/src/screencastdialog.c b/src/screencastdialog.c index 306992d..56d4d49 100644 --- a/src/screencastdialog.c +++ b/src/screencastdialog.c @@ -51,6 +51,10 @@ static guint signals[N_SIGNALS]; G_DEFINE_TYPE (ScreenCastDialog, screen_cast_dialog, GTK_TYPE_WINDOW) +/* + * Callbacks + */ + static void button_clicked (GtkWidget *button, ScreenCastDialog *dialog) @@ -84,7 +88,7 @@ button_clicked (GtkWidget *button, static void on_has_selection_changed (ScreenCastWidget *screen_cast_widget, - gboolean has_selection, + gboolean has_selection, ScreenCastDialog *dialog) { if (has_selection) @@ -93,32 +97,9 @@ on_has_selection_changed (ScreenCastWidget *screen_cast_widget, gtk_widget_set_sensitive (dialog->accept_button, FALSE); } -ScreenCastDialog * -screen_cast_dialog_new (const char *app_id, - ScreenCastSelection *select) -{ - ScreenCastDialog *dialog; - ScreenCastWidget *screen_cast_widget; - - dialog = g_object_new (SCREEN_CAST_TYPE_DIALOG, NULL); - screen_cast_widget = SCREEN_CAST_WIDGET (dialog->screen_cast_widget); - screen_cast_widget_set_app_id (screen_cast_widget, app_id); - screen_cast_widget_set_allow_multiple (screen_cast_widget, select->multiple); - screen_cast_widget_set_source_types (screen_cast_widget, - select->source_types); - - return dialog; -} - -static void -screen_cast_dialog_init (ScreenCastDialog *dialog) -{ - gtk_widget_init_template (GTK_WIDGET (dialog)); - - g_signal_connect (dialog->screen_cast_widget, "has-selection-changed", - G_CALLBACK (on_has_selection_changed), dialog); - gtk_widget_show (dialog->screen_cast_widget); -} +/* + * GtkWindow overrides + */ static gboolean screen_cast_dialog_close_request (GtkWindow *dialog) @@ -155,3 +136,30 @@ screen_cast_dialog_class_init (ScreenCastDialogClass *klass) gtk_widget_class_bind_template_child (widget_class, ScreenCastDialog, screen_cast_widget); gtk_widget_class_bind_template_callback (widget_class, button_clicked); } + +static void +screen_cast_dialog_init (ScreenCastDialog *dialog) +{ + gtk_widget_init_template (GTK_WIDGET (dialog)); + + g_signal_connect (dialog->screen_cast_widget, "has-selection-changed", + G_CALLBACK (on_has_selection_changed), dialog); + gtk_widget_show (dialog->screen_cast_widget); +} + +ScreenCastDialog * +screen_cast_dialog_new (const char *app_id, + ScreenCastSelection *select) +{ + ScreenCastDialog *dialog; + ScreenCastWidget *screen_cast_widget; + + dialog = g_object_new (SCREEN_CAST_TYPE_DIALOG, NULL); + screen_cast_widget = SCREEN_CAST_WIDGET (dialog->screen_cast_widget); + screen_cast_widget_set_app_id (screen_cast_widget, app_id); + screen_cast_widget_set_allow_multiple (screen_cast_widget, select->multiple); + screen_cast_widget_set_source_types (screen_cast_widget, + select->source_types); + + return dialog; +} diff --git a/src/screencastdialog.h b/src/screencastdialog.h index 247d93b..1fca470 100644 --- a/src/screencastdialog.h +++ b/src/screencastdialog.h @@ -26,5 +26,5 @@ G_DECLARE_FINAL_TYPE (ScreenCastDialog, screen_cast_dialog, SCREEN_CAST, DIALOG, GtkWindow) -ScreenCastDialog * screen_cast_dialog_new (const char *app_id, +ScreenCastDialog * screen_cast_dialog_new (const char *app_id, ScreenCastSelection *select); diff --git a/src/screencastwidget.c b/src/screencastwidget.c index cdd57dc..454c93e 100644 --- a/src/screencastwidget.c +++ b/src/screencastwidget.c @@ -65,6 +65,55 @@ static GQuark quark_window_widget_data; G_DEFINE_TYPE (ScreenCastWidget, screen_cast_widget, GTK_TYPE_BOX) +/* + * Auxiliary methods + */ + +static gboolean +add_selections (ScreenCastWidget *widget, + GVariantBuilder *source_selections_builder) +{ + GList *selected_monitor_rows; + GList *selected_window_rows; + GList *l; + + selected_monitor_rows = + gtk_list_box_get_selected_rows (GTK_LIST_BOX (widget->monitor_list)); + selected_window_rows = + gtk_list_box_get_selected_rows (GTK_LIST_BOX (widget->window_list)); + if (!selected_monitor_rows && !selected_window_rows) + return FALSE; + + for (l = selected_monitor_rows; l; l = l->next) + { + GtkWidget *monitor_widget = gtk_list_box_row_get_child (l->data); + Monitor *monitor; + + monitor = g_object_get_qdata (G_OBJECT (monitor_widget), + quark_monitor_widget_data); + + g_variant_builder_add (source_selections_builder, "(us)", + SCREEN_CAST_SOURCE_TYPE_MONITOR, + monitor_get_connector (monitor)); + } + g_list_free (selected_monitor_rows); + for (l = selected_window_rows; l; l = l->next) + { + GtkWidget *window_widget = gtk_list_box_row_get_child (l->data); + Window *window; + + window = g_object_get_qdata (G_OBJECT (window_widget), + quark_window_widget_data); + + g_variant_builder_add (source_selections_builder, "(ut)", + SCREEN_CAST_SOURCE_TYPE_WINDOW, + window_get_id (window)); + } + g_list_free (selected_window_rows); + + return TRUE; +} + static GtkWidget * create_window_widget (Window *window) { @@ -131,7 +180,7 @@ create_monitor_widget (LogicalMonitor *logical_monitor) } static gboolean -should_skip_window (Window *window, +should_skip_window (Window *window, GtkWindow *toplevel) { g_autofree char *processed_app_id = NULL; @@ -254,7 +303,7 @@ unselect_rows (GtkListBox *listbox) } static void -on_windows_changed (ShellIntrospect *shell_introspect, +on_windows_changed (ShellIntrospect *shell_introspect, ScreenCastWidget *widget) { update_windows_list (widget); @@ -283,9 +332,9 @@ disconnect_windows_changed_listener (ScreenCastWidget *widget) } static void -on_stack_switch (GtkStack *stack, +on_stack_switch (GtkStack *stack, GParamSpec *pspec, - gpointer *data) + gpointer *data) { ScreenCastWidget *widget = (ScreenCastWidget *)data; GtkWidget *visible_child; @@ -307,9 +356,9 @@ on_stack_switch (GtkStack *stack, } static void -on_row_activated (GtkListBox *box, +on_row_activated (GtkListBox *box, GtkListBoxRow *row, - gpointer *data) + gpointer *data) { if (!row) return; @@ -378,7 +427,7 @@ schedule_selection_change (ScreenCastWidget *widget) } static void -on_selected_rows_changed (GtkListBox *box, +on_selected_rows_changed (GtkListBox *box, ScreenCastWidget *widget) { /* GtkListBox activates rows after selecting them, which prevents @@ -403,59 +452,128 @@ update_list_box_header (GtkListBoxRow *row, static void on_monitors_changed (DisplayStateTracker *display_state_tracker, - ScreenCastWidget *widget) + ScreenCastWidget *widget) { update_monitors_list (widget); } -static gboolean -add_selections (ScreenCastWidget *widget, - GVariantBuilder *source_selections_builder) +/* + * GObject overrides + */ + +static void +screen_cast_widget_finalize (GObject *object) { - GList *selected_monitor_rows; - GList *selected_window_rows; - GList *l; + ScreenCastWidget *widget = SCREEN_CAST_WIDGET (object); - selected_monitor_rows = - gtk_list_box_get_selected_rows (GTK_LIST_BOX (widget->monitor_list)); - selected_window_rows = - gtk_list_box_get_selected_rows (GTK_LIST_BOX (widget->window_list)); - if (!selected_monitor_rows && !selected_window_rows) - return FALSE; + g_signal_handler_disconnect (widget->display_state_tracker, + widget->monitors_changed_handler_id); - for (l = selected_monitor_rows; l; l = l->next) + if (widget->windows_changed_handler_id) + disconnect_windows_changed_listener (widget); + + if (widget->selection_changed_timeout_id > 0) { - GtkWidget *monitor_widget = gtk_list_box_row_get_child (l->data); - Monitor *monitor; + g_source_remove (widget->selection_changed_timeout_id); + widget->selection_changed_timeout_id = 0; + } - monitor = g_object_get_qdata (G_OBJECT (monitor_widget), - quark_monitor_widget_data); + G_OBJECT_CLASS (screen_cast_widget_parent_class)->finalize (object); +} - g_variant_builder_add (source_selections_builder, "(us)", - SCREEN_CAST_SOURCE_TYPE_MONITOR, - monitor_get_connector (monitor)); - } - g_list_free (selected_monitor_rows); - for (l = selected_window_rows; l; l = l->next) - { - GtkWidget *window_widget = gtk_list_box_row_get_child (l->data); - Window *window; +static void +screen_cast_widget_class_init (ScreenCastWidgetClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - window = g_object_get_qdata (G_OBJECT (window_widget), - quark_window_widget_data); + object_class->finalize = screen_cast_widget_finalize; - g_variant_builder_add (source_selections_builder, "(ut)", - SCREEN_CAST_SOURCE_TYPE_WINDOW, - window_get_id (window)); - } - g_list_free (selected_window_rows); + signals[HAS_SELECTION_CHANGED] = g_signal_new ("has-selection-changed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + NULL, + G_TYPE_NONE, 1, + G_TYPE_BOOLEAN); - return TRUE; + gtk_widget_class_set_template_from_resource (widget_class, "/org/freedesktop/portal/desktop/gnome/screencastwidget.ui"); + gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, source_type_switcher); + gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, source_type); + gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, monitor_selection); + gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, window_selection); + gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, monitor_heading); + gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, monitor_list); + gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, window_heading); + gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, window_list); + gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, window_list_scrolled); + + quark_monitor_widget_data = g_quark_from_static_string ("-monitor-widget-connector-quark"); + quark_window_widget_data = g_quark_from_static_string ("-window-widget-connector-quark"); +} + +static void +screen_cast_widget_init (ScreenCastWidget *widget) +{ + GtkScrolledWindow *scrolled_window; + GtkAdjustment *vadjustment; + + gtk_widget_init_template (GTK_WIDGET (widget)); + + screen_cast_widget_set_app_id (widget, NULL); + screen_cast_widget_set_allow_multiple (widget, FALSE); + + gtk_list_box_set_header_func (GTK_LIST_BOX (widget->monitor_list), + update_list_box_header, + NULL, NULL); + gtk_list_box_set_header_func (GTK_LIST_BOX (widget->window_list), + update_list_box_header, + NULL, NULL); + scrolled_window = GTK_SCROLLED_WINDOW (widget->window_list_scrolled); + vadjustment = gtk_scrolled_window_get_vadjustment (scrolled_window); + gtk_list_box_set_adjustment (GTK_LIST_BOX (widget->window_list), vadjustment); + + g_signal_connect (widget->source_type, "notify::visible-child", + G_CALLBACK (on_stack_switch), + widget); + g_signal_connect (widget->monitor_list, "row-activated", + G_CALLBACK (on_row_activated), + NULL); + g_signal_connect (widget->window_list, "row-activated", + G_CALLBACK (on_row_activated), + NULL); + g_signal_connect (widget->monitor_list, "selected-rows-changed", + G_CALLBACK (on_selected_rows_changed), + widget); + g_signal_connect (widget->window_list, "selected-rows-changed", + G_CALLBACK (on_selected_rows_changed), + widget); + + widget->display_state_tracker = display_state_tracker_get (); + widget->monitors_changed_handler_id = + g_signal_connect (widget->display_state_tracker, + "monitors-changed", + G_CALLBACK (on_monitors_changed), + widget); + widget->shell_introspect = shell_introspect_get (); + + update_monitors_list (widget); + update_windows_list (widget); + + gtk_widget_show (widget->monitor_list); + gtk_widget_show (widget->window_list); +} + +void +init_screen_cast_widget (void) +{ + g_type_ensure (screen_cast_widget_get_type ()); } void screen_cast_widget_add_selections (ScreenCastWidget *widget, - GVariantBuilder *selections_builder) + GVariantBuilder *selections_builder) { GVariantBuilder source_selections_builder; @@ -474,7 +592,7 @@ screen_cast_widget_add_selections (ScreenCastWidget *widget, void screen_cast_widget_set_app_id (ScreenCastWidget *widget, - const char *app_id) + const char *app_id) { g_autofree char *monitor_heading = NULL; g_autofree char *window_heading = NULL; @@ -508,7 +626,7 @@ screen_cast_widget_set_app_id (ScreenCastWidget *widget, void screen_cast_widget_set_allow_multiple (ScreenCastWidget *widget, - gboolean multiple) + gboolean multiple) { gtk_list_box_set_selection_mode (GTK_LIST_BOX (widget->monitor_list), multiple ? GTK_SELECTION_MULTIPLE @@ -519,8 +637,8 @@ screen_cast_widget_set_allow_multiple (ScreenCastWidget *widget, } void -screen_cast_widget_set_source_types (ScreenCastWidget *screen_cast_widget, - ScreenCastSourceType source_types) +screen_cast_widget_set_source_types (ScreenCastWidget *screen_cast_widget, + ScreenCastSourceType source_types) { if (source_types & SCREEN_CAST_SOURCE_TYPE_MONITOR) gtk_widget_show (screen_cast_widget->monitor_selection); @@ -531,113 +649,3 @@ screen_cast_widget_set_source_types (ScreenCastWidget *screen_cast_widget, if (__builtin_popcount (source_types) > 1) gtk_widget_show (screen_cast_widget->source_type_switcher); } - -static void -screen_cast_widget_finalize (GObject *object) -{ - ScreenCastWidget *widget = SCREEN_CAST_WIDGET (object); - - g_signal_handler_disconnect (widget->display_state_tracker, - widget->monitors_changed_handler_id); - - if (widget->windows_changed_handler_id) - disconnect_windows_changed_listener (widget); - - if (widget->selection_changed_timeout_id > 0) - { - g_source_remove (widget->selection_changed_timeout_id); - widget->selection_changed_timeout_id = 0; - } - - G_OBJECT_CLASS (screen_cast_widget_parent_class)->finalize (object); -} - -static void -screen_cast_widget_init (ScreenCastWidget *widget) -{ - GtkScrolledWindow *scrolled_window; - GtkAdjustment *vadjustment; - - gtk_widget_init_template (GTK_WIDGET (widget)); - - screen_cast_widget_set_app_id (widget, NULL); - screen_cast_widget_set_allow_multiple (widget, FALSE); - - gtk_list_box_set_header_func (GTK_LIST_BOX (widget->monitor_list), - update_list_box_header, - NULL, NULL); - gtk_list_box_set_header_func (GTK_LIST_BOX (widget->window_list), - update_list_box_header, - NULL, NULL); - scrolled_window = GTK_SCROLLED_WINDOW (widget->window_list_scrolled); - vadjustment = gtk_scrolled_window_get_vadjustment (scrolled_window); - gtk_list_box_set_adjustment (GTK_LIST_BOX (widget->window_list), vadjustment); - - g_signal_connect (widget->source_type, "notify::visible-child", - G_CALLBACK (on_stack_switch), - widget); - g_signal_connect (widget->monitor_list, "row-activated", - G_CALLBACK (on_row_activated), - NULL); - g_signal_connect (widget->window_list, "row-activated", - G_CALLBACK (on_row_activated), - NULL); - g_signal_connect (widget->monitor_list, "selected-rows-changed", - G_CALLBACK (on_selected_rows_changed), - widget); - g_signal_connect (widget->window_list, "selected-rows-changed", - G_CALLBACK (on_selected_rows_changed), - widget); - - widget->display_state_tracker = display_state_tracker_get (); - widget->monitors_changed_handler_id = - g_signal_connect (widget->display_state_tracker, - "monitors-changed", - G_CALLBACK (on_monitors_changed), - widget); - widget->shell_introspect = shell_introspect_get (); - - update_monitors_list (widget); - update_windows_list (widget); - - gtk_widget_show (widget->monitor_list); - gtk_widget_show (widget->window_list); -} - -static void -screen_cast_widget_class_init (ScreenCastWidgetClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - object_class->finalize = screen_cast_widget_finalize; - - signals[HAS_SELECTION_CHANGED] = g_signal_new ("has-selection-changed", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - 0, - NULL, NULL, - NULL, - G_TYPE_NONE, 1, - G_TYPE_BOOLEAN); - - gtk_widget_class_set_template_from_resource (widget_class, "/org/freedesktop/portal/desktop/gnome/screencastwidget.ui"); - gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, source_type_switcher); - gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, source_type); - gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, monitor_selection); - gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, window_selection); - gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, monitor_heading); - gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, monitor_list); - gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, window_heading); - gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, window_list); - gtk_widget_class_bind_template_child (widget_class, ScreenCastWidget, window_list_scrolled); - - quark_monitor_widget_data = g_quark_from_static_string ("-monitor-widget-connector-quark"); - quark_window_widget_data = g_quark_from_static_string ("-window-widget-connector-quark"); -} - -void -init_screen_cast_widget (void) -{ - g_type_ensure (screen_cast_widget_get_type ()); -} diff --git a/src/screencastwidget.h b/src/screencastwidget.h index 3a1ebd2..34360a3 100644 --- a/src/screencastwidget.h +++ b/src/screencastwidget.h @@ -31,13 +31,13 @@ G_DECLARE_FINAL_TYPE (ScreenCastWidget, screen_cast_widget, void init_screen_cast_widget (void); void screen_cast_widget_set_app_id (ScreenCastWidget *widget, - const char *app_id); + const char *app_id); void screen_cast_widget_set_allow_multiple (ScreenCastWidget *widget, - gboolean multiple); + gboolean multiple); -void screen_cast_widget_set_source_types (ScreenCastWidget *screen_cast_widget, - ScreenCastSourceType source_types); +void screen_cast_widget_set_source_types (ScreenCastWidget *screen_cast_widget, + ScreenCastSourceType source_types); void screen_cast_widget_add_selections (ScreenCastWidget *widget, - GVariantBuilder *selections_builder); + GVariantBuilder *selections_builder); diff --git a/src/screencastwidget.ui b/src/screencastwidget.ui index 2417ca5..fb83b94 100644 --- a/src/screencastwidget.ui +++ b/src/screencastwidget.ui @@ -19,6 +19,7 @@ crossfade + windows_page @@ -80,6 +81,8 @@ + + monitors_page