This is an automated email from the git hooks/post-receive script. o c h o s i p u s h e d a c o m m i t t o b r a n c h m a s t e r in repository xfce/xfce4-settings.
commit d8532e345583d1cba01750ea125bd33e54a86613 Author: Simon Steinbeiss <[email protected]> Date: Sat Sep 1 01:50:02 2018 +0200 display: WIP make the profile treeview functional The treeview still needs to be re-populated correctly after changes and the popover menu needs to disappear after clicking "save". --- dialogs/display-settings/display-dialog.glade | 40 +++++- dialogs/display-settings/main.c | 195 ++++++++++++++++++-------- 2 files changed, 169 insertions(+), 66 deletions(-) diff --git a/dialogs/display-settings/display-dialog.glade b/dialogs/display-settings/display-dialog.glade index 3eddd82..f1d87b0 100644 --- a/dialogs/display-settings/display-dialog.glade +++ b/dialogs/display-settings/display-dialog.glade @@ -13,6 +13,21 @@ <property name="can_focus">False</property> <property name="icon_name">document-save-symbolic</property> </object> + <object class="GtkImage" id="image3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="icon_name">object-select-symbolic</property> + </object> + <object class="GtkImage" id="image4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="icon_name">document-save-symbolic</property> + </object> + <object class="GtkImage" id="image5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="icon_name">document-new-symbolic</property> + </object> <object class="XfceTitledDialog" id="display-dialog"> <property name="can_focus">False</property> <property name="title" translatable="yes">Display</property> @@ -527,11 +542,27 @@ </packing> </child> <child> + <object class="GtkButton" id="button-profile-create"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Create a new display profile.</property> + <property name="image">image5</property> + <property name="always_show_image">True</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> + <child> <object class="GtkButton" id="button-profile-save"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> - <property name="tooltip_text" translatable="yes">Save a new display profile or update an existing profile.</property> + <property name="tooltip_text" translatable="yes">Update an existing profile.</property> <property name="image">image2</property> <property name="always_show_image">True</property> </object> @@ -539,7 +570,7 @@ <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> - <property name="position">1</property> + <property name="position">2</property> </packing> </child> <style> @@ -614,9 +645,4 @@ <action-widget response="0">button-close</action-widget> </action-widgets> </object> - <object class="GtkImage" id="image3"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="icon_name">object-select-symbolic</property> - </object> </interface> diff --git a/dialogs/display-settings/main.c b/dialogs/display-settings/main.c index ee4e43a..010254a 100644 --- a/dialogs/display-settings/main.c +++ b/dialogs/display-settings/main.c @@ -150,11 +150,8 @@ GList *current_outputs = NULL; GtkWidget *randr_outputs_combobox = NULL; GtkWidget *apply_button = NULL; -/* Profile buttons */ -GtkWidget *profile_save_button = NULL; -GtkWidget *profile_delete_button = NULL; -GtkWidget *profile_apply_button = NULL; - +/* New Profile entry */ +GtkWidget *profile_create_entry; static void display_settings_minimal_only_display1_toggled (GtkToggleButton *button, GtkBuilder *builder); @@ -1512,108 +1509,181 @@ display_setting_apply (GtkWidget *widget, GtkBuilder *builder) } static void +display_settings_profile_changed (GtkTreeSelection *selection, GtkBuilder *builder) +{ + GObject *button; + GtkTreeModel *model; + GtkTreeIter iter; + gboolean selected; + + selected = gtk_tree_selection_get_selected (selection, &model, &iter); + + button = gtk_builder_get_object (builder, "button-profile-save"); + gtk_widget_set_sensitive (GTK_WIDGET (button), selected); + button = gtk_builder_get_object (builder, "button-profile-delete"); + gtk_widget_set_sensitive (GTK_WIDGET (button), selected); + button = gtk_builder_get_object (builder, "button-profile-apply"); + gtk_widget_set_sensitive (GTK_WIDGET (button), selected); +} + +static void +display_settings_minimal_profile_apply (GtkToggleButton *widget, GtkBuilder *builder) +{ + const gchar *profile; + gchar *profile_hash; + + profile = gtk_button_get_label (GTK_BUTTON (widget)); + profile_hash = g_compute_checksum_for_string (G_CHECKSUM_SHA1, profile, strlen(profile)); + xfce_randr_apply (xfce_randr, profile_hash, display_channel); +} + +static void display_settings_profile_save (GtkWidget *widget, GtkBuilder *builder) { - GtkWidget *entry = gtk_bin_get_child ((GtkBin*) gtk_builder_get_object (builder, "randr-profile")); + GObject *treeview; + GtkTreeSelection *selection; + GtkTreeModel *model; + GtkTreeIter iter; + + treeview = gtk_builder_get_object (builder, "randr-profile"); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); - if (gtk_entry_get_text_length (GTK_ENTRY (entry))) + if (gtk_tree_selection_get_selected (selection, &model, &iter)) { guint i = 0; gchar *property; gchar *profile_hash; - const gchar *profile; + gchar *profile_name; /* make sure the profile name can be saved as xfconf property name, so hash it */ - profile = gtk_entry_get_text (GTK_ENTRY (entry)); - profile_hash = g_compute_checksum_for_string (G_CHECKSUM_SHA1, profile, strlen(profile)); + gtk_tree_model_get (model, &iter, COLUMN_COMBO_NAME, &profile_name, -1); + profile_hash = g_compute_checksum_for_string (G_CHECKSUM_SHA1, profile_name, strlen(profile_name)); property = g_strdup_printf ("/%s", profile_hash); for (i=0; i < xfce_randr->noutput; i++) xfce_randr_save_output (xfce_randr, profile_hash, display_channel, i); /* save the human-readable name of the profile as string value */ - xfconf_channel_set_string (display_channel, property, profile); + xfconf_channel_set_string (display_channel, property, profile_name); display_settings_profile_list_populate (builder); gtk_widget_set_sensitive (widget, FALSE); g_free (property); g_free (profile_hash); + g_free (profile_name); } else gtk_widget_set_sensitive (widget, TRUE); } static void -display_settings_profile_changed (GtkWidget *widget, GtkBuilder *builder) +display_settings_profile_create_cb (GtkWidget *widget, GtkBuilder *builder) { - GtkWidget *entry = gtk_bin_get_child ((GtkBin*) gtk_builder_get_object (builder, "randr-profile")); - gboolean sensitive = gtk_entry_get_text_length (GTK_ENTRY (entry)); + const gchar *profile_name; + + profile_name = gtk_entry_get_text (GTK_ENTRY (profile_create_entry)); + if (profile_name) + { + guint i = 0; + gchar *property; + gchar *profile_hash; + + profile_hash = g_compute_checksum_for_string (G_CHECKSUM_SHA1, profile_name, strlen(profile_name)); + property = g_strdup_printf ("/%s", profile_hash); + for (i=0; i < xfce_randr->noutput; i++) + xfce_randr_save_output (xfce_randr, profile_hash, display_channel, i); - gtk_widget_set_sensitive (profile_save_button, sensitive); - gtk_widget_set_sensitive (profile_delete_button, sensitive); - gtk_widget_set_sensitive (profile_apply_button, sensitive); + /* save the human-readable name of the profile as string value */ + xfconf_channel_set_string (display_channel, property, profile_name); + display_settings_profile_list_populate (builder); + + g_free (property); + g_free (profile_hash); + //g_free (profile_name); + } } static void -display_settings_minimal_profile_apply (GtkToggleButton *widget, GtkBuilder *builder) +display_settings_profile_create (GtkWidget *widget, GtkBuilder *builder) { - const gchar *profile; - gchar *profile_hash; + GtkWidget *popover, *box, *label, *entry, *button; - profile = gtk_button_get_label (GTK_BUTTON (widget)); - profile_hash = g_compute_checksum_for_string (G_CHECKSUM_SHA1, profile, strlen(profile)); - xfce_randr_apply (xfce_randr, profile_hash, display_channel); + /* Create a popover dialog for saving a new profile */ + popover = gtk_popover_new (widget); + gtk_popover_set_modal (GTK_POPOVER (popover), TRUE); + + label = gtk_label_new (_("Profile Name:")); + profile_create_entry = gtk_entry_new (); + button = gtk_button_new_with_label ("Save"); + + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + gtk_widget_set_margin_start (box, 12); + gtk_widget_set_margin_end (box, 12); + gtk_widget_set_margin_top (box, 12); + gtk_widget_set_margin_bottom (box, 12); + gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (box), profile_create_entry, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (box), button, FALSE, TRUE, 0); + + gtk_container_add (GTK_CONTAINER (popover), box); + gtk_widget_show_all (popover); + + g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (display_settings_profile_create_cb), builder); } static void display_settings_profile_apply (GtkWidget *widget, GtkBuilder *builder) { - GtkWidget *entry = gtk_bin_get_child ((GtkBin*) gtk_builder_get_object (builder, "randr-profile")); + GObject *treeview; + GtkTreeSelection *selection; + GtkTreeModel *model; + GtkTreeIter iter; - if (gtk_entry_get_text_length (GTK_ENTRY (entry))) + treeview = gtk_builder_get_object (builder, "randr-profile"); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); + + if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gchar *profile_hash; - const gchar *profile; - - gtk_widget_set_sensitive (profile_save_button, TRUE); - gtk_widget_set_sensitive (profile_delete_button, TRUE); + gchar *profile_name; - profile = gtk_entry_get_text (GTK_ENTRY (entry)); - profile_hash = g_compute_checksum_for_string (G_CHECKSUM_SHA1, profile, strlen(profile)); + gtk_tree_model_get (model, &iter, COLUMN_COMBO_NAME, &profile_name, -1); + profile_hash = g_compute_checksum_for_string (G_CHECKSUM_SHA1, profile_name, strlen(profile_name)); xfce_randr_apply (xfce_randr, profile_hash, display_channel); if (!display_setting_timed_confirmation (builder)) { xfce_randr_apply (xfce_randr, "Default", display_channel); - gtk_entry_set_text (GTK_ENTRY (entry), ""); - gtk_widget_set_sensitive (profile_save_button, FALSE); - gtk_widget_set_sensitive (profile_delete_button, FALSE); foo_scroll_area_invalidate (FOO_SCROLL_AREA (randr_gui_area)); } g_free (profile_hash); - } - else - { - gtk_widget_set_sensitive (profile_save_button, FALSE); - gtk_widget_set_sensitive (profile_delete_button, FALSE); + g_free (profile_name); } } static void display_settings_profile_delete (GtkWidget *widget, GtkBuilder *builder) { - GtkWidget *entry = gtk_bin_get_child ((GtkBin*) gtk_builder_get_object (builder, "randr-profile")); + GObject *treeview; + GtkTreeSelection *selection; + GtkTreeModel *model; + GtkTreeIter iter; - if (gtk_entry_get_text_length (GTK_ENTRY (entry))) + treeview = gtk_builder_get_object (builder, "randr-profile"); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); + + if (gtk_tree_selection_get_selected (selection, &model, &iter)) { - gint response; + gchar *profile_name; + gint response; gchar *secondary_message; - secondary_message = g_strdup_printf (_("Do you really want to delete the profile '%s'?"), gtk_entry_get_text (GTK_ENTRY (entry))); + gtk_tree_model_get (model, &iter, COLUMN_COMBO_NAME, &profile_name, -1); + secondary_message = g_strdup_printf (_("Do you really want to delete the profile '%s'?"), profile_name); response = xfce_message_dialog (NULL, _("Question"), "dialog-question", @@ -1624,22 +1694,23 @@ display_settings_profile_delete (GtkWidget *widget, GtkBuilder *builder) NULL); g_free (secondary_message); + if (response == GTK_RESPONSE_YES) { GString *property; gchar *profile_hash; - const gchar *profile_name; - profile_name = gtk_entry_get_text (GTK_ENTRY (entry)); profile_hash = g_compute_checksum_for_string (G_CHECKSUM_SHA1, profile_name, strlen (profile_name)); property = g_string_new (profile_hash); g_string_prepend_c (property, '/'); xfconf_channel_reset_property (display_channel, property->str, True); display_settings_profile_list_populate (builder); - gtk_entry_set_text (GTK_ENTRY (entry), ""); + g_free (profile_name); } - else { + else + { + g_free (profile_name); return; } } @@ -1651,6 +1722,8 @@ display_settings_dialog_new (GtkBuilder *builder) GObject *combobox; GtkCellRenderer *renderer; GObject *label, *check, *primary, *mirror, *identify; + GtkWidget *button; + GtkTreeSelection *selection; /* Get the combobox */ combobox = gtk_builder_get_object (builder, "randr-outputs"); @@ -1711,28 +1784,32 @@ display_settings_dialog_new (GtkBuilder *builder) g_signal_connect (G_OBJECT (combobox), "changed", G_CALLBACK (display_setting_rotations_changed), builder); combobox = gtk_builder_get_object (builder, "randr-profile"); - - //g_signal_connect (G_OBJECT (combobox), "changed", G_CALLBACK (display_settings_profile_changed), builder); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (combobox)); + gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); + g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (display_settings_profile_changed), builder); check = gtk_builder_get_object (builder, "minimal-autoshow"); xfconf_g_property_bind (display_channel, "/Notify", G_TYPE_BOOLEAN, check, "active"); - apply_button = GTK_WIDGET(gtk_builder_get_object (builder, "apply")); + apply_button = GTK_WIDGET (gtk_builder_get_object (builder, "apply")); g_signal_connect (G_OBJECT (apply_button), "clicked", G_CALLBACK (display_setting_apply), builder); gtk_widget_set_sensitive(apply_button, FALSE); - profile_save_button = GTK_WIDGET(gtk_builder_get_object (builder, "button-profile-save")); - gtk_widget_set_sensitive (profile_save_button, FALSE); - g_signal_connect (G_OBJECT (profile_save_button), "clicked", G_CALLBACK (display_settings_profile_save), builder); + button = GTK_WIDGET (gtk_builder_get_object (builder, "button-profile-save")); + gtk_widget_set_sensitive (button, FALSE); + g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (display_settings_profile_save), builder); + + button = GTK_WIDGET (gtk_builder_get_object (builder, "button-profile-delete")); + gtk_widget_set_sensitive (button, FALSE); + g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (display_settings_profile_delete), builder); - profile_delete_button = GTK_WIDGET(gtk_builder_get_object (builder, "button-profile-delete")); - gtk_widget_set_sensitive (profile_delete_button, FALSE); - g_signal_connect (G_OBJECT (profile_delete_button), "clicked", G_CALLBACK (display_settings_profile_delete), builder); + button = GTK_WIDGET (gtk_builder_get_object (builder, "button-profile-apply")); + gtk_widget_set_sensitive (button, FALSE); + g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (display_settings_profile_apply), builder); - profile_apply_button = GTK_WIDGET(gtk_builder_get_object (builder, "button-profile-apply")); - gtk_widget_set_sensitive (profile_apply_button, FALSE); - g_signal_connect (G_OBJECT (profile_apply_button), "clicked", G_CALLBACK (display_settings_profile_apply), builder); + button = GTK_WIDGET (gtk_builder_get_object (builder, "button-profile-create")); + g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (display_settings_profile_create), builder); /* Populate the combobox */ display_settings_combobox_populate (builder); -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list [email protected] https://mail.xfce.org/mailman/listinfo/xfce4-commits
