summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-11-18 12:19:07 +0000
committerMatthias Clasen <mclasen@redhat.com>2020-11-18 12:19:07 +0000
commit184886f89376b1c3acdb729d4c3d13505b41e66f (patch)
treea2e19867b12e8b1e56ea3ce29405a4e681b0464e
parentb3243132a0253788d9e591a1dc76103056a04cb3 (diff)
parent36ef94b002ace20f4a8665b2f15b59f98983add7 (diff)
downloadgtk+-184886f89376b1c3acdb729d4c3d13505b41e66f.tar.gz
Merge branch 'constraint-editor-work' into 'master'
Constraint editor work See merge request GNOME/gtk!2863
-rw-r--r--demos/constraint-editor/constraint-editor-window.c22
-rw-r--r--demos/constraint-editor/constraint-editor.c30
-rw-r--r--demos/constraint-editor/constraint-editor.ui1
-rw-r--r--gtk/gtkconstraintlayout.c12
4 files changed, 50 insertions, 15 deletions
diff --git a/demos/constraint-editor/constraint-editor-window.c b/demos/constraint-editor/constraint-editor-window.c
index ba25a806ec..ca18e27cf8 100644
--- a/demos/constraint-editor/constraint-editor-window.c
+++ b/demos/constraint-editor/constraint-editor-window.c
@@ -36,7 +36,7 @@ struct _ConstraintEditorWindow
G_DEFINE_TYPE(ConstraintEditorWindow, constraint_editor_window, GTK_TYPE_APPLICATION_WINDOW);
static GtkConstraintTarget *
-find_target (GListModel *model,
+find_target (GListModel *model,
GtkConstraintTarget *orig)
{
const char *name;
@@ -163,20 +163,30 @@ constraint_editor_window_load (ConstraintEditorWindow *self,
GtkConstraint *clone;
GtkConstraintTarget *target;
GtkConstraintTarget *source;
+ GtkConstraintAttribute source_attr;
item = g_list_model_get_item (list, i);
constraint = GTK_CONSTRAINT (item);
target = gtk_constraint_get_target (constraint);
source = gtk_constraint_get_source (constraint);
- clone = gtk_constraint_new (find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), target),
+ source_attr = gtk_constraint_get_source_attribute (constraint);
+
+ if (source == NULL && source_attr == GTK_CONSTRAINT_ATTRIBUTE_NONE)
+ clone = gtk_constraint_new_constant (find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), target),
gtk_constraint_get_target_attribute (constraint),
gtk_constraint_get_relation (constraint),
- find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), source),
- gtk_constraint_get_target_attribute (constraint),
- gtk_constraint_get_multiplier (constraint),
gtk_constraint_get_constant (constraint),
gtk_constraint_get_strength (constraint));
+ else
+ clone = gtk_constraint_new (find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), target),
+ gtk_constraint_get_target_attribute (constraint),
+ gtk_constraint_get_relation (constraint),
+ find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), source),
+ source_attr,
+ gtk_constraint_get_multiplier (constraint),
+ gtk_constraint_get_constant (constraint),
+ gtk_constraint_get_strength (constraint));
constraint_view_add_constraint (CONSTRAINT_VIEW (self->view), clone);
@@ -300,7 +310,7 @@ save_response_cb (GtkNativeDialog *dialog,
model = constraint_view_get_model (CONSTRAINT_VIEW (self->view));
text = serialize_model (model);
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
- g_file_replace_contents (file, text, -1,
+ g_file_replace_contents (file, text, strlen (text),
NULL, FALSE,
G_FILE_CREATE_NONE,
NULL,
diff --git a/demos/constraint-editor/constraint-editor.c b/demos/constraint-editor/constraint-editor.c
index 62af6e356f..6f897b2d8a 100644
--- a/demos/constraint-editor/constraint-editor.c
+++ b/demos/constraint-editor/constraint-editor.c
@@ -142,6 +142,9 @@ get_target (GListModel *model,
{
int i;
+ if (id == NULL)
+ return NULL;
+
if (strcmp ("super", id) == 0)
return NULL;
@@ -212,6 +215,22 @@ get_relation_nick (GtkConstraintRelation relation)
return nick;
}
+static const char *
+get_relation_display_name (GtkConstraintRelation relation)
+{
+ switch (relation)
+ {
+ case GTK_CONSTRAINT_RELATION_LE:
+ return "≤";
+ case GTK_CONSTRAINT_RELATION_EQ:
+ return "=";
+ case GTK_CONSTRAINT_RELATION_GE:
+ return "≥";
+ default:
+ return "?";
+ }
+}
+
static GtkConstraintStrength
get_strength (const char *id)
{
@@ -331,6 +350,7 @@ source_attr_changed (ConstraintEditor *editor)
{
gtk_widget_set_sensitive (editor->source, TRUE);
gtk_widget_set_sensitive (editor->multiplier, TRUE);
+ gtk_editable_set_text (GTK_EDITABLE (editor->multiplier), "1");
}
}
@@ -347,7 +367,7 @@ constraint_editor_constraint_to_string (GtkConstraint *constraint)
name = get_target_name (gtk_constraint_get_target (constraint));
attr = get_attr_nick (gtk_constraint_get_target_attribute (constraint));
- relation = get_relation_nick (gtk_constraint_get_relation (constraint));
+ relation = get_relation_display_name (gtk_constraint_get_relation (constraint));
if (name == NULL)
name = "[ ]";
@@ -441,8 +461,12 @@ update_preview (ConstraintEditor *editor)
static void
update_button (ConstraintEditor *editor)
{
- if (gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->target)) != NULL &&
- gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source)) != NULL)
+ const char *target = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->target));
+ const char *source = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source));
+ const char *source_attr = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source_attr));
+
+ if (target &&
+ (source || (source_attr && get_target_attr (source_attr) == GTK_CONSTRAINT_ATTRIBUTE_NONE)))
gtk_widget_set_sensitive (editor->button, TRUE);
else
gtk_widget_set_sensitive (editor->button, FALSE);
diff --git a/demos/constraint-editor/constraint-editor.ui b/demos/constraint-editor/constraint-editor.ui
index d7c0d0e25b..d201aae350 100644
--- a/demos/constraint-editor/constraint-editor.ui
+++ b/demos/constraint-editor/constraint-editor.ui
@@ -78,6 +78,7 @@
<object class="GtkComboBoxText" id="source_attr">
<signal name="changed" handler="update_preview" swapped="yes"/>
<signal name="changed" handler="source_attr_changed" swapped="yes"/>
+ <signal name="changed" handler="update_button" swapped="yes"/>
<layout>
<property name="column">2</property>
<property name="row">3</property>
diff --git a/gtk/gtkconstraintlayout.c b/gtk/gtkconstraintlayout.c
index e5d6037962..92fbfcc416 100644
--- a/gtk/gtkconstraintlayout.c
+++ b/gtk/gtkconstraintlayout.c
@@ -1431,18 +1431,18 @@ constraint_data_to_constraint (const ConstraintData *data,
else
strength = GTK_CONSTRAINT_STRENGTH_REQUIRED;
- if (source != NULL && source_attr != GTK_CONSTRAINT_ATTRIBUTE_NONE)
+ if (source == NULL && source_attr == GTK_CONSTRAINT_ATTRIBUTE_NONE)
+ return gtk_constraint_new_constant (target, target_attr,
+ relation,
+ data->constant,
+ strength);
+ else
return gtk_constraint_new (target, target_attr,
relation,
source, source_attr,
data->multiplier,
data->constant,
strength);
-
- return gtk_constraint_new_constant (target, target_attr,
- relation,
- data->constant,
- strength);
}
static GtkConstraintGuide *