Compare commits

...

14 Commits

Author SHA1 Message Date
Matthias Clasen
088f7331f9 selection: Emit ::selection-changed for autoselection
If a single selection gains a selected item because the
underlying model goes from empty to non-empty, and the
selection is set to autoselect, emit ::selection-changed.

Update the existing tests that were previously checking
the wrong thing, and add a new test specifically for this.
2020-05-31 13:03:56 -04:00
Matthias Clasen
93353888ca Merge branch 'columnview-1' into 'master'
Convert the inspector to column views

See merge request GNOME/gtk!1994
2020-05-31 14:06:31 +00:00
Matthias Clasen
2a9d2cc7e9 inspector: Touch up list styling
This is just the minimal amount of work to make
headers recognizable.
2020-05-31 09:24:19 -04:00
Matthias Clasen
0d9873d8bc inspector: Use a column view for actions
A straight conversion from list box to column view.
2020-05-31 09:24:12 -04:00
Matthias Clasen
23bc38ed06 inspector: Make the resource list sortable
This is using a GtkTreeListRowSorter to keep expanded
state of the tree while changing the sorting.
2020-05-31 09:24:04 -04:00
Matthias Clasen
42d26b4b05 inspector: Use a column view for the resource list
A conversion from tree view to column view.
2020-05-31 09:23:51 -04:00
Matthias Clasen
04700789e1 inspector: Use a column view for properties
Just a straight conversion from list box to column view.
2020-05-31 09:23:45 -04:00
Matthias Clasen
e23baa59f0 inspector: Add columns to the object tree
Add columnview columns in the object tree.
We do the same for treeview columns.
2020-05-31 09:23:37 -04:00
Matthias Clasen
e8e28b61db Merge branch 'fix-mnemonic-zero' into 'master'
label: Fix mnemonic zero

Closes #2805

See merge request GNOME/gtk!1993
2020-05-31 13:02:51 +00:00
Yuri Chornoivan
b766707f28 Update Ukrainian translation 2020-05-31 06:12:49 +00:00
Yuri Chornoivan
0787f262a0 Update Ukrainian translation 2020-05-31 06:09:05 +00:00
Matthias Clasen
d833f4a632 Merge branch 'dropdown-for-merge' into 'master'
Dropdown for merge

Closes #2214

See merge request GNOME/gtk!1992
2020-05-31 05:34:18 +00:00
Matthias Clasen
ce1e364ab8 Merge branch 'listview-for-merge' into 'master'
Listview for merge

Closes #2214

See merge request GNOME/gtk!1991
2020-05-31 05:32:37 +00:00
Matthias Clasen
adb5b299c9 label: Fix mnemonic zero
We were confusing '\0' and '0' when parsing the label
for mnemonics.

Fixes: #2805
2020-05-30 21:42:54 -04:00
21 changed files with 2037 additions and 1391 deletions

View File

@@ -2238,7 +2238,7 @@ extract_mnemonic_keyval (const char *text,
p = g_utf8_next_char (p);
c = g_utf8_get_char (p);
if (c != '_' && c != '0')
if (c != '_' && c != '\0')
{
const gsize byte_index = p - text - 1; /* Of the _ */

View File

@@ -192,6 +192,21 @@ G_DEFINE_TYPE_EXTENDED (GtkSingleSelection, gtk_single_selection, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (GTK_TYPE_SELECTION_MODEL,
gtk_single_selection_selection_model_init))
static void
emit_selection_changed (GtkSelectionModel *self,
int old_position,
int position)
{
if (old_position == GTK_INVALID_LIST_POSITION)
gtk_selection_model_selection_changed (self, position, 1);
else if (position == GTK_INVALID_LIST_POSITION)
gtk_selection_model_selection_changed (self, old_position, 1);
else if (position < old_position)
gtk_selection_model_selection_changed (self, position, old_position - position + 1);
else
gtk_selection_model_selection_changed (self, old_position, position - old_position + 1);
}
static void
gtk_single_selection_items_changed_cb (GListModel *model,
guint position,
@@ -200,6 +215,9 @@ gtk_single_selection_items_changed_cb (GListModel *model,
GtkSingleSelection *self)
{
g_object_freeze_notify (G_OBJECT (self));
int selected_before;
selected_before = self->selected;
if (self->selected_item == NULL)
{
@@ -295,6 +313,9 @@ gtk_single_selection_items_changed_cb (GListModel *model,
g_list_model_items_changed (G_LIST_MODEL (self), position, removed, added);
if (self->selected != selected_before)
emit_selection_changed (GTK_SELECTION_MODEL (self), selected_before, self->selected);
g_object_thaw_notify (G_OBJECT (self));
}
@@ -563,14 +584,7 @@ gtk_single_selection_set_selected (GtkSingleSelection *self,
g_clear_object (&self->selected_item);
self->selected_item = new_selected;
if (old_position == GTK_INVALID_LIST_POSITION)
gtk_selection_model_selection_changed (GTK_SELECTION_MODEL (self), position, 1);
else if (position == GTK_INVALID_LIST_POSITION)
gtk_selection_model_selection_changed (GTK_SELECTION_MODEL (self), old_position, 1);
else if (position < old_position)
gtk_selection_model_selection_changed (GTK_SELECTION_MODEL (self), position, old_position - position + 1);
else
gtk_selection_model_selection_changed (GTK_SELECTION_MODEL (self), old_position, position - old_position + 1);
emit_selection_changed (GTK_SELECTION_MODEL (self), old_position, position);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SELECTED]);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SELECTED_ITEM]);

View File

@@ -96,12 +96,14 @@ variant_editor_new (const GVariantType *type,
else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING))
{
editor = gtk_entry_new ();
gtk_editable_set_width_chars (GTK_EDITABLE (editor), 10);
g_signal_connect (editor, "notify::text", G_CALLBACK (variant_editor_changed_cb), d);
}
else
{
editor = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
entry = gtk_entry_new ();
gtk_editable_set_width_chars (GTK_EDITABLE (entry), 10);
gtk_box_append (GTK_BOX (editor), entry);
label = gtk_label_new (g_variant_type_peek_string (type));
gtk_box_append (GTK_BOX (editor), label);
@@ -284,7 +286,8 @@ constructed (GObject *object)
row = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
activate = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
gtk_box_append (GTK_BOX (row), activate);
gtk_size_group_add_widget (r->priv->sg, activate);
if (r->priv->sg)
gtk_size_group_add_widget (r->priv->sg, activate);
r->priv->activate_button = gtk_button_new_with_label (_("Activate"));
g_signal_connect (r->priv->activate_button, "clicked", G_CALLBACK (activate_action), r);
@@ -307,7 +310,8 @@ constructed (GObject *object)
r->priv->state_type = g_variant_type_copy (g_variant_get_type (state));
row = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
label = gtk_label_new (_("Set State"));
gtk_size_group_add_widget (r->priv->sg, label);
if (r->priv->sg)
gtk_size_group_add_widget (r->priv->sg, label);
gtk_box_append (GTK_BOX (row), label);
r->priv->state_entry = variant_editor_new (r->priv->state_type, state_changed, r);
variant_editor_set_value (r->priv->state_entry, state);
@@ -327,7 +331,7 @@ finalize (GObject *object)
GtkInspectorActionEditor *r = GTK_INSPECTOR_ACTION_EDITOR (object);
g_free (r->priv->name);
g_object_unref (r->priv->sg);
g_clear_object (&r->priv->sg);
if (r->priv->state_type)
g_variant_type_free (r->priv->state_type);
g_signal_handlers_disconnect_by_func (r->priv->group, action_enabled_changed_cb, r);

View File

@@ -0,0 +1,61 @@
#include "action-holder.h"
struct _ActionHolder {
GObject instance;
GActionGroup *group;
char *name;
};
G_DEFINE_TYPE (ActionHolder, action_holder, G_TYPE_OBJECT)
static void
action_holder_init (ActionHolder *holder)
{
}
static void
action_holder_finalize (GObject *object)
{
ActionHolder *holder = ACTION_HOLDER (object);
g_object_unref (holder->group);
g_free (holder->name);
G_OBJECT_CLASS (action_holder_parent_class)->finalize (object);
}
static void
action_holder_class_init (ActionHolderClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
object_class->finalize = action_holder_finalize;
}
ActionHolder *
action_holder_new (GActionGroup *group,
const char *name)
{
ActionHolder *holder;
holder = g_object_new (ACTION_TYPE_HOLDER, NULL);
holder->group = g_object_ref (group);
holder->name = g_strdup (name);
return holder;
}
GActionGroup *
action_holder_get_group (ActionHolder *holder)
{
return holder->group;
}
const char *
action_holder_get_name (ActionHolder *holder)
{
return holder->name;
}

View File

@@ -0,0 +1,17 @@
#ifndef __ACTION_HOLDER_H__
#define __ACTION_HOLDER_H__
#include <gtk/gtk.h>
#define ACTION_TYPE_HOLDER (action_holder_get_type ())
G_DECLARE_FINAL_TYPE (ActionHolder, action_holder, ACTION, HOLDER, GObject)
ActionHolder * action_holder_new (GActionGroup *group,
const char *name);
GActionGroup *action_holder_get_group (ActionHolder *holder);
const char *action_holder_get_name (ActionHolder *holder);
#endif /* __ACTION_HOLDER_H__ */

View File

@@ -20,6 +20,7 @@
#include "actions.h"
#include "action-editor.h"
#include "action-holder.h"
#include "gtkapplication.h"
#include "gtkapplicationwindow.h"
@@ -37,13 +38,11 @@
struct _GtkInspectorActionsPrivate
{
GtkWidget *list;
GtkSizeGroup *name;
GtkSizeGroup *enabled;
GtkSizeGroup *parameter;
GtkSizeGroup *state;
GtkSizeGroup *activate;
GActionGroup *group;
GtkWidget *button;
GActionGroup *group;
GListModel *actions;
GtkColumnViewColumn *name;
};
enum {
@@ -61,105 +60,170 @@ gtk_inspector_actions_init (GtkInspectorActions *sl)
}
static void
add_action (GtkInspectorActions *sl,
GActionGroup *group,
const gchar *name)
action_added_cb (GActionGroup *group,
const gchar *action_name,
GtkInspectorActions *sl)
{
gboolean enabled;
const gchar *parameter;
GVariant *state;
gchar *state_string;
GtkWidget *row;
GtkWidget *label;
GtkWidget *box;
char *key = g_strdup (name);
GtkWidget *editor;
ActionHolder *holder = action_holder_new (group, action_name);
g_list_store_append (G_LIST_STORE (sl->priv->actions), holder);
g_object_unref (holder);
}
static void
setup_name_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
GtkWidget *label;
label = gtk_label_new (NULL);
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_list_item_set_child (list_item, label);
}
static void
bind_name_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
gpointer item;
GtkWidget *label;
item = gtk_list_item_get_item (list_item);
label = gtk_list_item_get_child (list_item);
gtk_label_set_label (GTK_LABEL (label), action_holder_get_name (ACTION_HOLDER (item)));
}
static void
setup_enabled_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
GtkWidget *label;
label = gtk_label_new (NULL);
gtk_label_set_xalign (GTK_LABEL (label), 0.5);
gtk_list_item_set_child (list_item, label);
}
static void
bind_enabled_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
gpointer item;
GtkWidget *label;
GActionGroup *group;
const char *name;
gboolean enabled;
item = gtk_list_item_get_item (list_item);
label = gtk_list_item_get_child (list_item);
group = action_holder_get_group (ACTION_HOLDER (item));
name = action_holder_get_name (ACTION_HOLDER (item));
enabled = g_action_group_get_action_enabled (group, name);
gtk_label_set_label (GTK_LABEL (label), enabled ? "+" : "-");
}
static void
setup_parameter_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
GtkWidget *label;
label = gtk_label_new (NULL);
gtk_label_set_xalign (GTK_LABEL (label), 0.5);
gtk_list_item_set_child (list_item, label);
gtk_style_context_add_class (gtk_widget_get_style_context (label), "cell");
}
static void
bind_parameter_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
gpointer item;
GtkWidget *label;
GActionGroup *group;
const char *name;
const char *parameter;
item = gtk_list_item_get_item (list_item);
label = gtk_list_item_get_child (list_item);
group = action_holder_get_group (ACTION_HOLDER (item));
name = action_holder_get_name (ACTION_HOLDER (item));
parameter = (const gchar *)g_action_group_get_action_parameter_type (group, name);
gtk_label_set_label (GTK_LABEL (label), parameter);
}
static void
setup_state_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
GtkWidget *label;
label = gtk_label_new (NULL);
gtk_widget_set_margin_start (label, 5);
gtk_widget_set_margin_end (label, 5);
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_list_item_set_child (list_item, label);
gtk_style_context_add_class (gtk_widget_get_style_context (label), "cell");
}
static void
bind_state_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
gpointer item;
GtkWidget *label;
GActionGroup *group;
const char *name;
GVariant *state;
char *state_string;
item = gtk_list_item_get_item (list_item);
label = gtk_list_item_get_child (list_item);
group = action_holder_get_group (ACTION_HOLDER (item));
name = action_holder_get_name (ACTION_HOLDER (item));
state = g_action_group_get_action_state (group, name);
if (state)
state_string = g_variant_print (state, FALSE);
else
state_string = g_strdup ("");
row = gtk_list_box_row_new ();
g_object_set_data_full (G_OBJECT (row), "key", key, g_free);
gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE);
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (row), box);
label = gtk_label_new (name);
gtk_widget_add_css_class (label, "cell");
gtk_label_set_xalign (GTK_LABEL (label), 0);
gtk_size_group_add_widget (sl->priv->name, label);
gtk_box_append (GTK_BOX (box), label);
label = gtk_label_new (enabled ? "+" : "-");
gtk_widget_add_css_class (label, "cell");
gtk_label_set_xalign (GTK_LABEL (label), 0);
gtk_widget_set_halign (label, GTK_ALIGN_CENTER);
gtk_size_group_add_widget (sl->priv->enabled, label);
gtk_box_append (GTK_BOX (box), label);
g_object_set_data (G_OBJECT (row), "enabled", label);
label = gtk_label_new (parameter);
gtk_widget_add_css_class (label, "cell");
gtk_label_set_xalign (GTK_LABEL (label), 0);
gtk_size_group_add_widget (sl->priv->parameter, label);
gtk_box_append (GTK_BOX (box), label);
label = gtk_label_new (state_string);
gtk_label_set_xalign (GTK_LABEL (label), 0);
gtk_widget_add_css_class (label, "cell");
gtk_size_group_add_widget (sl->priv->state, label);
gtk_box_append (GTK_BOX (box), label);
g_object_set_data (G_OBJECT (row), "state", label);
editor = gtk_inspector_action_editor_new (group, name, sl->priv->activate);
gtk_widget_add_css_class (editor, "cell");
gtk_box_append (GTK_BOX (box), editor);
g_object_set_data (G_OBJECT (row), "editor", editor);
gtk_list_box_insert (GTK_LIST_BOX (sl->priv->list), row, -1);
gtk_label_set_label (GTK_LABEL (label), state_string);
g_free (state_string);
}
static GtkWidget *
find_row (GtkInspectorActions *sl,
const char *action_name)
{
GtkWidget *row = NULL;
GtkWidget *widget;
const char *key;
for (widget = gtk_widget_get_first_child (sl->priv->list);
widget;
widget = gtk_widget_get_next_sibling (widget))
{
if (!GTK_IS_LIST_BOX_ROW (widget))
continue;
key = g_object_get_data (G_OBJECT (widget), "key");
if (g_str_equal (key, action_name))
{
row = widget;
break;
}
}
return row;
if (state)
g_variant_unref (state);
}
static void
action_added_cb (GActionGroup *group,
const gchar *action_name,
GtkInspectorActions *sl)
bind_changes_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
add_action (sl, group, action_name);
gpointer item;
GActionGroup *group;
const char *name;
GtkWidget *editor;
item = gtk_list_item_get_item (list_item);
group = action_holder_get_group (ACTION_HOLDER (item));
name = action_holder_get_name (ACTION_HOLDER (item));
editor = gtk_inspector_action_editor_new (group, name, NULL);
gtk_style_context_add_class (gtk_widget_get_style_context (editor), "cell");
gtk_list_item_set_child (list_item, editor);
}
static void
unbind_changes_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
gtk_list_item_set_child (list_item, NULL);
}
static void
@@ -167,21 +231,37 @@ action_removed_cb (GActionGroup *group,
const gchar *action_name,
GtkInspectorActions *sl)
{
GtkWidget *row;
int i;
row = find_row (sl, action_name);
if (row)
gtk_list_box_remove (GTK_LIST_BOX (sl->priv->list), row);
for (i = 0; i < g_list_model_get_n_items (sl->priv->actions); i++)
{
ActionHolder *holder = g_list_model_get_item (sl->priv->actions, i);
if (group == action_holder_get_group (holder) &&
strcmp (action_name, action_holder_get_name (holder)) == 0)
g_list_store_remove (G_LIST_STORE (sl->priv->actions), i);
g_object_unref (holder);
}
}
static void
set_row_enabled (GtkWidget *row,
gboolean enabled)
notify_action_changed (GtkInspectorActions *sl,
GActionGroup *group,
const char *action_name)
{
GtkWidget *label;
int i;
label = GTK_WIDGET (g_object_get_data (G_OBJECT (row), "enabled"));
gtk_label_set_label (GTK_LABEL (label), enabled ? "+" : "-" );
for (i = 0; i < g_list_model_get_n_items (sl->priv->actions); i++)
{
ActionHolder *holder = g_list_model_get_item (sl->priv->actions, i);
if (group == action_holder_get_group (holder) &&
strcmp (action_name, action_holder_get_name (holder)) == 0)
g_list_model_items_changed (sl->priv->actions, i, 1, 1);
g_object_unref (holder);
}
}
static void
@@ -190,26 +270,7 @@ action_enabled_changed_cb (GActionGroup *group,
gboolean enabled,
GtkInspectorActions *sl)
{
GtkWidget *row;
row = find_row (sl, action_name);
set_row_enabled (row, enabled);
}
static void
set_row_state (GtkWidget *row,
GVariant *state)
{
gchar *state_string;
GtkWidget *label;
if (state)
state_string = g_variant_print (state, FALSE);
else
state_string = g_strdup ("");
label = GTK_WIDGET (g_object_get_data (G_OBJECT (row), "state"));
gtk_label_set_label (GTK_LABEL (label), state_string);
g_free (state_string);
notify_action_changed (sl, group, action_name);
}
static void
@@ -218,35 +279,14 @@ action_state_changed_cb (GActionGroup *group,
GVariant *state,
GtkInspectorActions *sl)
{
GtkWidget *row;
row = find_row (sl, action_name);
set_row_state (row, state);
notify_action_changed (sl, group, action_name);
}
static void
refresh_all (GtkInspectorActions *sl)
{
GtkWidget *widget;
for (widget = gtk_widget_get_first_child (sl->priv->list);
widget;
widget = gtk_widget_get_next_sibling (widget))
{
const char *name = g_object_get_data (G_OBJECT (widget), "key");
gboolean enabled;
GVariant *state;
GtkInspectorActionEditor *r;
enabled = g_action_group_get_action_enabled (sl->priv->group, name);
state = g_action_group_get_action_state (sl->priv->group, name);
set_row_enabled (widget, enabled);
set_row_state (widget, state);
r = (GtkInspectorActionEditor*)g_object_get_data (G_OBJECT (widget), "editor");
gtk_inspector_action_editor_update (r, enabled, state);
}
guint n = g_list_model_get_n_items (sl->priv->actions);
g_list_model_items_changed (sl->priv->actions, 0, n, n);
}
static void
@@ -283,7 +323,7 @@ add_group (GtkInspectorActions *sl,
names = g_action_group_list_actions (group);
for (i = 0; names[i]; i++)
add_action (sl, group, names[i]);
action_added_cb (group, names[i], sl);
g_strfreev (names);
g_set_object (&sl->priv->group, group);
@@ -305,7 +345,6 @@ gtk_inspector_actions_set_object (GtkInspectorActions *sl,
{
GtkWidget *stack;
GtkStackPage *page;
GtkWidget *child;
stack = gtk_widget_get_parent (GTK_WIDGET (sl));
page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
@@ -315,8 +354,7 @@ gtk_inspector_actions_set_object (GtkInspectorActions *sl,
if (sl->priv->group)
remove_group (sl, page, sl->priv->group);
while ((child = gtk_widget_get_first_child (sl->priv->list)))
gtk_list_box_remove (GTK_LIST_BOX (sl->priv->list), child);
g_list_store_remove_all (G_LIST_STORE (sl->priv->actions));
if (GTK_IS_APPLICATION (object))
add_group (sl, page, G_ACTION_GROUP (object));
@@ -328,6 +366,8 @@ gtk_inspector_actions_set_object (GtkInspectorActions *sl,
if (muxer)
add_group (sl, page, G_ACTION_GROUP (muxer));
}
gtk_column_view_sort_by_column (GTK_COLUMN_VIEW (sl->priv->list), sl->priv->name, GTK_SORT_ASCENDING);
}
static void
@@ -370,13 +410,48 @@ set_property (GObject *object,
}
}
static char *
holder_name (gpointer item)
{
return g_strdup (action_holder_get_name (ACTION_HOLDER (item)));
}
static void
constructed (GObject *object)
{
GtkInspectorActions *sl = GTK_INSPECTOR_ACTIONS (object);
GtkSorter *sorter;
GListModel *sorted;
GListModel *model;
g_signal_connect_swapped (sl->priv->button, "clicked",
G_CALLBACK (refresh_all), sl);
sorter = gtk_string_sorter_new (gtk_cclosure_expression_new (G_TYPE_STRING,
NULL,
0, NULL,
(GCallback)holder_name,
NULL, NULL));
gtk_column_view_column_set_sorter (sl->priv->name, sorter);
g_object_unref (sorter);
sl->priv->actions = G_LIST_MODEL (g_list_store_new (ACTION_TYPE_HOLDER));
sorted = G_LIST_MODEL (gtk_sort_list_model_new (sl->priv->actions,
gtk_column_view_get_sorter (GTK_COLUMN_VIEW (sl->priv->list))));
model = G_LIST_MODEL (gtk_no_selection_new (sorted));
gtk_column_view_set_model (GTK_COLUMN_VIEW (sl->priv->list), model);
g_object_unref (sorted);
g_object_unref (model);
}
static void
finalize (GObject *object)
{
GtkInspectorActions *sl = GTK_INSPECTOR_ACTIONS (object);
g_object_unref (sl->priv->actions);
G_OBJECT_CLASS (gtk_inspector_actions_parent_class)->finalize (object);
}
static void
@@ -385,6 +460,7 @@ gtk_inspector_actions_class_init (GtkInspectorActionsClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->finalize = finalize;
object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->constructed = constructed;
@@ -396,10 +472,16 @@ gtk_inspector_actions_class_init (GtkInspectorActionsClass *klass)
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/actions.ui");
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorActions, list);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorActions, name);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorActions, enabled);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorActions, parameter);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorActions, state);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorActions, activate);
gtk_widget_class_bind_template_callback (widget_class, setup_name_cb);
gtk_widget_class_bind_template_callback (widget_class, bind_name_cb);
gtk_widget_class_bind_template_callback (widget_class, setup_enabled_cb);
gtk_widget_class_bind_template_callback (widget_class, bind_enabled_cb);
gtk_widget_class_bind_template_callback (widget_class, setup_parameter_cb);
gtk_widget_class_bind_template_callback (widget_class, bind_parameter_cb);
gtk_widget_class_bind_template_callback (widget_class, setup_state_cb);
gtk_widget_class_bind_template_callback (widget_class, bind_state_cb);
gtk_widget_class_bind_template_callback (widget_class, bind_changes_cb);
gtk_widget_class_bind_template_callback (widget_class, unbind_changes_cb);
}
// vim: set et sw=2 ts=2:

View File

@@ -1,98 +1,78 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="gtk40">
<object class="GtkListStore" id="model">
<columns>
<column type="gchararray"/>
<column type="gchararray"/>
<column type="gboolean"/>
<column type="gchararray"/>
<column type="gchararray"/>
<column type="gpointer"/>
</columns>
</object>
<template class="GtkInspectorActions" parent="GtkBox">
<property name="orientation">vertical</property>
<style>
<class name="view"/>
</style>
<child>
<object class="GtkBox">
<style>
<class name="header"/>
</style>
<child>
<object class="GtkLabel" id="name_heading">
<property name="label" translatable="yes">Name</property>
<property name="xalign">0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="enabled_heading">
<property name="label" translatable="yes">Enabled</property>
<property name="xalign">0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="parameter_heading">
<property name="label" translatable="yes">Parameter Type</property>
<property name="xalign">0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="state_heading">
<property name="label" translatable="yes">State</property>
<property name="xalign">0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="changes_heading">
<property name="label" translatable="yes"></property>
<property name="xalign">0</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<property name="hscrollbar-policy">never</property>
<child>
<object class="GtkListBox" id="list">
<object class="GtkColumnView" id="list">
<style>
<class name="list"/>
</style>
<property name="selection-mode">none</property>
<child>
<object class="GtkColumnViewColumn" id="name">
<property name="title" translatable="yes">Name</property>
<property name="factory">
<object class="GtkSignalListItemFactory">
<signal name="setup" handler="setup_name_cb"/>
<signal name="bind" handler="bind_name_cb"/>
</object>
</property>
</object>
</child>
<child>
<object class="GtkColumnViewColumn" id="enabled">
<property name="title" translatable="yes">Enabled</property>
<property name="factory">
<object class="GtkSignalListItemFactory">
<signal name="setup" handler="setup_enabled_cb"/>
<signal name="bind" handler="bind_enabled_cb"/>
</object>
</property>
</object>
</child>
<child>
<object class="GtkColumnViewColumn" id="parameter">
<property name="title" translatable="yes">Parameter Type</property>
<property name="factory">
<object class="GtkSignalListItemFactory">
<signal name="setup" handler="setup_parameter_cb"/>
<signal name="bind" handler="bind_parameter_cb"/>
</object>
</property>
</object>
</child>
<child>
<object class="GtkColumnViewColumn" id="state">
<property name="title" translatable="yes">State</property>
<property name="factory">
<object class="GtkSignalListItemFactory">
<signal name="setup" handler="setup_state_cb"/>
<signal name="bind" handler="bind_state_cb"/>
</object>
</property>
</object>
</child>
<child>
<object class="GtkColumnViewColumn" id="changes">
<property name="title"></property>
<property name="factory">
<object class="GtkSignalListItemFactory">
<signal name="bind" handler="bind_changes_cb"/>
<signal name="unbind" handler="unbind_changes_cb"/>
</object>
</property>
</object>
</child>
</object>
</child>
</object>
</child>
</template>
<object class="GtkSizeGroup" id="name">
<property name="mode">horizontal</property>
<widgets>
<widget name="name_heading"/>
</widgets>
</object>
<object class="GtkSizeGroup" id="enabled">
<property name="mode">horizontal</property>
<widgets>
<widget name="enabled_heading"/>
</widgets>
</object>
<object class="GtkSizeGroup" id="parameter">
<property name="mode">horizontal</property>
<widgets>
<widget name="parameter_heading"/>
</widgets>
</object>
<object class="GtkSizeGroup" id="state">
<property name="mode">horizontal</property>
<widgets>
<widget name="state_heading"/>
</widgets>
</object>
<object class="GtkSizeGroup" id="activate">
<property name="mode">horizontal</property>
</object>
</interface>

View File

@@ -1,21 +1,29 @@
/* some style for the inspector */
.header {
background: lightgray;
border: 1px solid gray;
.list header {
background: white;
border: 1px solid lightgray;
}
.header>* {
.list header button {
background: none;
}
.list header button.dnd {
background: gray;
}
.list header>* {
padding: 2px;
font-weight: bold;
}
.header sort_indicator {
.list header sort_indicator {
min-width: 16px;
}
.header>*:not(:last-child) {
border-right: 1px solid gray;
.list header>*:not(:last-child) {
border-right: 1px solid lightgray;
}
.list .cell {

View File

@@ -38,4 +38,7 @@ inspector_sources = files(
'updatesoverlay.c',
'visual.c',
'window.c',
'prop-holder.c',
'resource-holder.c',
'action-holder.c'
)

View File

@@ -336,6 +336,29 @@ object_tree_tree_view_get_children (GObject *object)
return G_LIST_MODEL (result);
}
static GListModel *
object_tree_column_view_get_children (GObject *object)
{
GtkColumnView *view = GTK_COLUMN_VIEW (object);
GListStore *result_list;
GtkFlattenListModel *result;
GListModel *columns, *sublist;
result_list = g_list_store_new (G_TYPE_LIST_MODEL);
columns = gtk_column_view_get_columns (view);
g_list_store_append (result_list, columns);
sublist = object_tree_widget_get_children (object);
g_list_store_append (result_list, sublist);
g_object_unref (sublist);
result = gtk_flatten_list_model_new (G_TYPE_OBJECT, G_LIST_MODEL (result_list));
g_object_unref (result_list);
return G_LIST_MODEL (result);
}
static GListModel *
object_tree_icon_view_get_children (GObject *object)
{
@@ -499,6 +522,11 @@ static const ObjectTreeClassFuncs object_tree_class_funcs[] = {
object_tree_widget_get_parent,
object_tree_tree_view_get_children
},
{
gtk_column_view_get_type,
object_tree_widget_get_parent,
object_tree_column_view_get_children
},
{
gtk_combo_box_get_type,
object_tree_widget_get_parent,

145
gtk/inspector/prop-holder.c Normal file
View File

@@ -0,0 +1,145 @@
#include "prop-holder.h"
enum {
PROP_OBJECT = 1,
PROP_PSPEC,
PROP_NAME,
NUM_PROPERTIES
};
static GParamSpec *properties[NUM_PROPERTIES];
struct _PropHolder {
GObject instance;
GObject *object;
GParamSpec *pspec;
};
G_DEFINE_TYPE (PropHolder, prop_holder, G_TYPE_OBJECT)
static void
prop_holder_init (PropHolder *holder)
{
}
static void
prop_holder_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
PropHolder *holder = PROP_HOLDER (object);
switch (prop_id)
{
case PROP_OBJECT:
holder->object = g_value_dup_object (value);
break;
case PROP_PSPEC:
holder->pspec = g_value_get_param (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
prop_holder_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
PropHolder *holder = PROP_HOLDER (object);
switch (prop_id)
{
case PROP_OBJECT:
g_value_set_object (value, holder->object);
break;
case PROP_PSPEC:
g_value_set_param (value, holder->pspec);
break;
case PROP_NAME:
g_value_set_string (value, holder->pspec->name);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
prop_holder_finalize (GObject *object)
{
PropHolder *holder = PROP_HOLDER (object);
g_object_unref (holder->object);
G_OBJECT_CLASS (prop_holder_parent_class)->finalize (object);
}
static void
prop_holder_class_init (PropHolderClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
object_class->finalize = prop_holder_finalize;
object_class->set_property = prop_holder_set_property;
object_class->get_property = prop_holder_get_property;
properties[PROP_OBJECT] =
g_param_spec_object ("object", "object", "object",
G_TYPE_OBJECT,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
properties[PROP_PSPEC] =
g_param_spec_param ("pspec", "pspec", "pspec",
G_TYPE_PARAM,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
properties[PROP_NAME] =
g_param_spec_string ("name", "name", "name",
NULL,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, NUM_PROPERTIES, properties);
}
PropHolder *
prop_holder_new (GObject *object,
GParamSpec *pspec)
{
PropHolder *holder;
holder = g_object_new (PROP_TYPE_HOLDER,
"object", object,
"pspec", pspec,
NULL);
return holder;
}
GObject *
prop_holder_get_object (PropHolder *holder)
{
return holder->object;
}
GParamSpec *
prop_holder_get_pspec (PropHolder *holder)
{
return holder->pspec;
}
const char *
prop_holder_get_name (PropHolder *holder)
{
return holder->pspec->name;
}

View File

@@ -0,0 +1,17 @@
#ifndef __PROP_HOLDER_H__
#define __PROP_HOLDER_H__
#include <gtk/gtk.h>
#define PROP_TYPE_HOLDER (prop_holder_get_type ())
G_DECLARE_FINAL_TYPE (PropHolder, prop_holder, PROP, HOLDER, GObject)
PropHolder * prop_holder_new (GObject *object,
GParamSpec *pspeC);
GObject *prop_holder_get_object (PropHolder *holder);
GParamSpec *prop_holder_get_pspec (PropHolder *holder);
const char *prop_holder_get_name (PropHolder *holder);
#endif /* __PROP_HOLDER_H__ */

View File

@@ -44,6 +44,7 @@
#include "gtkroot.h"
#include "gtkgestureclick.h"
#include "gtkstylecontext.h"
#include "prop-holder.h"
enum
{
@@ -52,11 +53,6 @@ enum
PROP_SEARCH_ENTRY
};
typedef enum {
COLUMN_NAME,
COLUMN_ORIGIN
} SortColumn;
struct _GtkInspectorPropListPrivate
{
GObject *object;
@@ -64,17 +60,11 @@ struct _GtkInspectorPropListPrivate
GtkInspectorObjectTree *object_tree;
GtkWidget *search_entry;
GtkWidget *search_stack;
GtkWidget *list2;
GtkWidget *name_sort_indicator;
GtkWidget *origin_sort_indicator;
GtkWidget *name_heading;
GtkWidget *origin_heading;
SortColumn sort_column;
GtkSortType sort_direction;
GtkSizeGroup *names;
GtkSizeGroup *types;
GtkSizeGroup *values;
GtkSizeGroup *origins;
GtkWidget *list;
GtkFilter *filter;
GtkColumnViewColumn *name;
GtkColumnViewColumn *type;
GtkColumnViewColumn *origin;
};
G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorPropList, gtk_inspector_prop_list, GTK_TYPE_BOX)
@@ -94,103 +84,66 @@ show_search_entry (GtkInspectorPropList *pl)
pl->priv->search_entry);
}
static void
apply_sort (GtkInspectorPropList *pl,
SortColumn column,
GtkSortType direction)
static char *
holder_prop (gpointer item)
{
const char *icon_name;
GParamSpec *prop = prop_holder_get_pspec (PROP_HOLDER (item));
icon_name = direction == GTK_SORT_ASCENDING ? "pan-down-symbolic"
: "pan-up-symbolic";
if (column == COLUMN_NAME)
{
gtk_image_clear (GTK_IMAGE (pl->priv->origin_sort_indicator));
gtk_image_set_from_icon_name (GTK_IMAGE (pl->priv->name_sort_indicator),
icon_name);
}
else
{
gtk_image_clear (GTK_IMAGE (pl->priv->name_sort_indicator));
gtk_image_set_from_icon_name (GTK_IMAGE (pl->priv->origin_sort_indicator),
icon_name);
}
pl->priv->sort_column = column;
pl->priv->sort_direction = direction;
gtk_list_box_invalidate_sort (GTK_LIST_BOX (pl->priv->list2));
return g_strdup (prop->name);
}
static void
sort_changed (GtkGestureClick *gesture,
int n_press,
double x,
double y,
GtkInspectorPropList *pl)
static char *
holder_type (gpointer item)
{
SortColumn column;
GtkSortType direction;
GtkWidget *widget;
GParamSpec *prop = prop_holder_get_pspec (PROP_HOLDER (item));
widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture));
if (widget == pl->priv->name_heading)
column = COLUMN_NAME;
else
column = COLUMN_ORIGIN;
if (pl->priv->sort_column == column &&
pl->priv->sort_direction == GTK_SORT_ASCENDING)
direction = GTK_SORT_DESCENDING;
else
direction = GTK_SORT_ASCENDING;
apply_sort (pl, column, direction);
return g_strdup (g_type_name (prop->value_type));
}
static const char *
row_get_column (GtkListBoxRow *row,
SortColumn column)
static char *
holder_origin (gpointer item)
{
GParamSpec *prop = g_object_get_data (G_OBJECT (row), "pspec");
GParamSpec *prop = prop_holder_get_pspec (PROP_HOLDER (item));
if (column == COLUMN_NAME)
return prop->name;
else
return g_type_name (prop->owner_type);
}
static int
sort_func (GtkListBoxRow *row1,
GtkListBoxRow *row2,
gpointer user_data)
{
GtkInspectorPropList *pl = user_data;
const char *s1 = row_get_column (row1, pl->priv->sort_column);
const char *s2 = row_get_column (row2, pl->priv->sort_column);
int ret = strcmp (s1, s2);
return pl->priv->sort_direction == GTK_SORT_ASCENDING ? ret : -ret;
}
static gboolean
filter_func (GtkListBoxRow *row,
gpointer data)
{
GtkInspectorPropList *pl = data;
GParamSpec *pspec = (GParamSpec *)g_object_get_data (G_OBJECT (row), "pspec");
const char *text = gtk_editable_get_text (GTK_EDITABLE (pl->priv->search_entry));
return g_str_has_prefix (pspec->name, text);
return g_strdup (g_type_name (prop->owner_type));
}
static void
gtk_inspector_prop_list_init (GtkInspectorPropList *pl)
{
GtkSorter *sorter;
pl->priv = gtk_inspector_prop_list_get_instance_private (pl);
gtk_widget_init_template (GTK_WIDGET (pl));
apply_sort (pl, COLUMN_NAME, GTK_SORT_ASCENDING);
pl->priv->filter = gtk_string_filter_new ();
gtk_string_filter_set_match_mode (GTK_STRING_FILTER (pl->priv->filter), GTK_STRING_FILTER_MATCH_MODE_PREFIX);
sorter = gtk_string_sorter_new (gtk_cclosure_expression_new (G_TYPE_STRING, NULL,
0, NULL,
(GCallback)holder_prop,
NULL, NULL));
gtk_string_filter_set_expression (GTK_STRING_FILTER (pl->priv->filter),
gtk_string_sorter_get_expression (GTK_STRING_SORTER (sorter)));
gtk_column_view_column_set_sorter (pl->priv->name, sorter);
g_object_unref (sorter);
sorter = gtk_string_sorter_new (gtk_cclosure_expression_new (G_TYPE_STRING, NULL,
0, NULL,
(GCallback)holder_type,
NULL, NULL));
gtk_column_view_column_set_sorter (pl->priv->type, sorter);
g_object_unref (sorter);
sorter = gtk_string_sorter_new (gtk_cclosure_expression_new (G_TYPE_STRING, NULL,
0, NULL,
(GCallback)holder_origin,
NULL, NULL));
gtk_column_view_column_set_sorter (pl->priv->origin, sorter);
g_object_unref (sorter);
}
static void
@@ -253,6 +206,7 @@ show_object (GtkInspectorPropEditor *editor,
gtk_inspector_object_tree_activate_object (pl->priv->object_tree, object);
}
static void cleanup_object (GtkInspectorPropList *pl);
static void
@@ -265,6 +219,16 @@ finalize (GObject *object)
G_OBJECT_CLASS (gtk_inspector_prop_list_parent_class)->finalize (object);
}
static void
update_filter (GtkInspectorPropList *pl,
GtkSearchEntry *entry)
{
const char *text;
text = gtk_editable_get_text (GTK_EDITABLE (entry));
gtk_string_filter_set_search (GTK_STRING_FILTER (pl->priv->filter), text);
}
static void
constructed (GObject *object)
{
@@ -278,10 +242,7 @@ constructed (GObject *object)
g_signal_connect_swapped (pl->priv->search_entry, "search-started",
G_CALLBACK (show_search_entry), pl);
g_signal_connect_swapped (pl->priv->search_entry, "search-changed",
G_CALLBACK (gtk_list_box_invalidate_filter), pl->priv->list2);
gtk_list_box_set_filter_func (GTK_LIST_BOX (pl->priv->list2), filter_func, pl, NULL);
gtk_list_box_set_sort_func (GTK_LIST_BOX (pl->priv->list2), sort_func, pl, NULL);
G_CALLBACK (update_filter), pl);
}
static void
@@ -298,7 +259,7 @@ update_key_capture (GtkInspectorPropList *pl)
focus = gtk_root_get_focus (GTK_ROOT (toplevel));
if (GTK_IS_EDITABLE (focus) &&
gtk_widget_is_ancestor (focus, pl->priv->list2))
gtk_widget_is_ancestor (focus, pl->priv->list))
capture_widget = NULL;
else
capture_widget = toplevel;
@@ -344,6 +305,120 @@ unroot (GtkWidget *widget)
GTK_WIDGET_CLASS (gtk_inspector_prop_list_parent_class)->unroot (widget);
}
static void
setup_name_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
GtkWidget *label;
label = gtk_label_new (NULL);
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_list_item_set_child (list_item, label);
gtk_style_context_add_class (gtk_widget_get_style_context (label), "cell");
}
static void
bind_name_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
GObject *item;
GtkWidget *label;
item = gtk_list_item_get_item (list_item);
label = gtk_list_item_get_child (list_item);
gtk_label_set_label (GTK_LABEL (label), prop_holder_get_name (PROP_HOLDER (item)));
}
static void
setup_type_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
GtkWidget *label;
label = gtk_label_new (NULL);
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_list_item_set_child (list_item, label);
gtk_style_context_add_class (gtk_widget_get_style_context (label), "cell");
}
static void
bind_type_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
GObject *item;
GtkWidget *label;
GParamSpec *prop;
const char *type;
item = gtk_list_item_get_item (list_item);
label = gtk_list_item_get_child (list_item);
prop = prop_holder_get_pspec (PROP_HOLDER (item));
type = g_type_name (G_PARAM_SPEC_VALUE_TYPE (prop));
gtk_label_set_label (GTK_LABEL (label), type);
}
static void
setup_origin_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
GtkWidget *label;
label = gtk_label_new (NULL);
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_list_item_set_child (list_item, label);
gtk_style_context_add_class (gtk_widget_get_style_context (label), "cell");
}
static void
bind_origin_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item)
{
GObject *item;
GtkWidget *label;
GParamSpec *prop;
const char *origin;
item = gtk_list_item_get_item (list_item);
label = gtk_list_item_get_child (list_item);
prop = prop_holder_get_pspec (PROP_HOLDER (item));
origin = g_type_name (prop->owner_type);
gtk_label_set_label (GTK_LABEL (label), origin);
}
static void
bind_value_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item,
gpointer data)
{
GObject *item;
GtkWidget *widget;
GObject *object;
const char *name;
item = gtk_list_item_get_item (list_item);
object = prop_holder_get_object (PROP_HOLDER (item));
name = prop_holder_get_name (PROP_HOLDER (item));
widget = gtk_inspector_prop_editor_new (object, name, NULL);
g_signal_connect (widget, "show-object", G_CALLBACK (show_object), data);
gtk_list_item_set_child (list_item, widget);
gtk_style_context_add_class (gtk_widget_get_style_context (widget), "cell");
}
static void
unbind_value_cb (GtkSignalListItemFactory *factory,
GtkListItem *list_item,
gpointer data)
{
gtk_list_item_set_child (list_item, NULL);
}
static void
gtk_inspector_prop_list_class_init (GtkInspectorPropListClass *klass)
{
@@ -369,16 +444,18 @@ gtk_inspector_prop_list_class_init (GtkInspectorPropListClass *klass)
GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/prop-list.ui");
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, list2);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, names);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, types);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, values);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, origins);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, name_heading);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, name_sort_indicator);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, origin_heading);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, origin_sort_indicator);
gtk_widget_class_bind_template_callback (widget_class, sort_changed);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, list);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, name);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, type);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, origin);
gtk_widget_class_bind_template_callback (widget_class, setup_name_cb);
gtk_widget_class_bind_template_callback (widget_class, bind_name_cb);
gtk_widget_class_bind_template_callback (widget_class, setup_type_cb);
gtk_widget_class_bind_template_callback (widget_class, bind_type_cb);
gtk_widget_class_bind_template_callback (widget_class, setup_origin_cb);
gtk_widget_class_bind_template_callback (widget_class, bind_origin_cb);
gtk_widget_class_bind_template_callback (widget_class, bind_value_cb);
gtk_widget_class_bind_template_callback (widget_class, unbind_value_cb);
}
/* Like g_strdup_value_contents, but keeps the type name separate */
@@ -483,88 +560,6 @@ strdup_value_contents (const GValue *value,
}
}
static GtkWidget *
gtk_inspector_prop_list_create_row (GtkInspectorPropList *pl,
GParamSpec *prop)
{
GValue gvalue = {0};
gchar *value;
gchar *type;
gchar *attribute = NULL;
gboolean writable;
GtkWidget *row;
GtkWidget *box;
GtkWidget *label;
GtkWidget *widget;
g_value_init (&gvalue, prop->value_type);
g_object_get_property (pl->priv->object, prop->name, &gvalue);
strdup_value_contents (&gvalue, &value, &type);
if (GTK_IS_CELL_RENDERER (pl->priv->object))
{
gpointer *layout;
GtkCellArea *area;
gint column = -1;
area = NULL;
layout = g_object_get_data (pl->priv->object, "gtk-inspector-cell-layout");
if (layout)
area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (layout));
if (area)
column = gtk_cell_area_attribute_get_column (area,
GTK_CELL_RENDERER (pl->priv->object),
prop->name);
if (column != -1)
attribute = g_strdup_printf ("%d", column);
}
writable = ((prop->flags & G_PARAM_WRITABLE) != 0) &&
((prop->flags & G_PARAM_CONSTRUCT_ONLY) == 0);
row = gtk_list_box_row_new ();
gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE);
g_object_set_data (G_OBJECT (row), "pspec", prop);
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (row), box);
label = gtk_label_new (prop->name);
gtk_widget_add_css_class (label, "cell");
gtk_widget_set_sensitive (label, writable);
gtk_label_set_xalign (GTK_LABEL (label), 0);
gtk_size_group_add_widget (pl->priv->names, label);
gtk_box_append (GTK_BOX (box), label);
label = gtk_label_new (type ? type : "");
gtk_widget_add_css_class (label, "cell");
gtk_widget_set_sensitive (label, writable);
gtk_label_set_xalign (GTK_LABEL (label), 0);
gtk_size_group_add_widget (pl->priv->types, label);
gtk_box_append (GTK_BOX (box), label);
label = gtk_label_new (g_type_name (prop->owner_type));
gtk_widget_add_css_class (label, "cell");
gtk_widget_set_sensitive (label, writable);
gtk_label_set_xalign (GTK_LABEL (label), 0);
gtk_size_group_add_widget (pl->priv->origins, label);
gtk_box_append (GTK_BOX (box), label);
widget = gtk_inspector_prop_editor_new (pl->priv->object, prop->name, pl->priv->values);
gtk_widget_add_css_class (widget, "cell");
gtk_box_append (GTK_BOX (box), widget);
g_signal_connect (widget, "show-object", G_CALLBACK (show_object), pl);
g_free (value);
g_free (type);
g_free (attribute);
g_value_unset (&gvalue);
return row;
}
static void
cleanup_object (GtkInspectorPropList *pl)
{
@@ -583,7 +578,10 @@ gtk_inspector_prop_list_set_object (GtkInspectorPropList *pl,
GParamSpec **props;
guint num_properties;
guint i;
GtkWidget *w;
GListStore *store;
GListModel *list;
GListModel *filtered;
GtkSortListModel *sorted;
if (!object)
return FALSE;
@@ -600,19 +598,19 @@ gtk_inspector_prop_list_set_object (GtkInspectorPropList *pl,
pl->priv->object = object;
while ((w = gtk_widget_get_first_child (pl->priv->list2)))
gtk_list_box_remove (GTK_LIST_BOX (pl->priv->list2), w);
store = g_list_store_new (PROP_TYPE_HOLDER);
for (i = 0; i < num_properties; i++)
{
GParamSpec *prop = props[i];
GtkWidget *row;
PropHolder *holder;
if (! (prop->flags & G_PARAM_READABLE))
continue;
row = gtk_inspector_prop_list_create_row (pl, prop);
gtk_list_box_insert (GTK_LIST_BOX (pl->priv->list2), row, -1);
holder = prop_holder_new (object, prop);
g_list_store_append (store, holder);
g_object_unref (holder);
}
g_free (props);
@@ -620,8 +618,21 @@ gtk_inspector_prop_list_set_object (GtkInspectorPropList *pl,
if (GTK_IS_WIDGET (object))
g_signal_connect_object (object, "destroy", G_CALLBACK (cleanup_object), pl, G_CONNECT_SWAPPED);
filtered = G_LIST_MODEL (gtk_filter_list_model_new (G_LIST_MODEL (store), pl->priv->filter));
sorted = gtk_sort_list_model_new (filtered, NULL);
list = G_LIST_MODEL (gtk_no_selection_new (G_LIST_MODEL (sorted)));
gtk_column_view_set_model (GTK_COLUMN_VIEW (pl->priv->list), list);
gtk_sort_list_model_set_sorter (sorted, gtk_column_view_get_sorter (GTK_COLUMN_VIEW (pl->priv->list)));
gtk_column_view_sort_by_column (GTK_COLUMN_VIEW (pl->priv->list), pl->priv->name, GTK_SORT_ASCENDING);
gtk_widget_show (GTK_WIDGET (pl));
g_object_unref (list);
g_object_unref (sorted);
g_object_unref (filtered);
g_object_unref (store);
return TRUE;
}

View File

@@ -8,87 +8,60 @@
<style>
<class name="view"/>
</style>
<child>
<object class="GtkBox">
<style>
<class name="header"/>
</style>
<child>
<object class="GtkBox" id="name_heading">
<property name="hexpand">0</property>
<child>
<object class="GtkGestureClick">
<signal name="pressed" handler="sort_changed" swapped="no"/>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label">Name</property>
<property name="xalign">0</property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkImage" id="name_sort_indicator">
<style>
<class name="sort_indicator"/>
</style>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="type_heading">
<property name="label">Type</property>
<property name="xalign">0</property>
</object>
</child>
<child>
<object class="GtkBox" id="origin_heading">
<property name="hexpand">0</property>
<child>
<object class="GtkGestureClick">
<signal name="pressed" handler="sort_changed" swapped="no"/>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label">Defined at</property>
<property name="xalign">0</property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkImage" id="origin_sort_indicator">
<style>
<class name="sort_indicator"/>
</style>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="value_heading">
<property name="label">Value</property>
<property name="xalign">0</property>
<property name="hexpand">0</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<property name="hscrollbar-policy">never</property>
<child>
<object class="GtkListBox" id="list2">
<object class="GtkColumnView" id="list">
<style>
<class name="list"/>
</style>
<property name="selection-mode">none</property>
<child>
<object class="GtkColumnViewColumn" id="name">
<property name="title" translatable="yes">Name</property>
<property name="factory">
<object class="GtkSignalListItemFactory">
<signal name="setup" handler="setup_name_cb"/>
<signal name="bind" handler="bind_name_cb"/>
</object>
</property>
</object>
</child>
<child>
<object class="GtkColumnViewColumn" id="type">
<property name="title" translatable="yes">Type</property>
<property name="factory">
<object class="GtkSignalListItemFactory">
<signal name="setup" handler="setup_type_cb"/>
<signal name="bind" handler="bind_type_cb"/>
</object>
</property>
</object>
</child>
<child>
<object class="GtkColumnViewColumn" id="origin">
<property name="title" translatable="yes">Defined At</property>
<property name="factory">
<object class="GtkSignalListItemFactory">
<signal name="setup" handler="setup_origin_cb"/>
<signal name="bind" handler="bind_origin_cb"/>
</object>
</property>
</object>
</child>
<child>
<object class="GtkColumnViewColumn">
<property name="title" translatable="yes">Value</property>
<property name="factory">
<object class="GtkSignalListItemFactory">
<signal name="bind" handler="bind_value_cb"/>
<signal name="unbind" handler="unbind_value_cb"/>
</object>
</property>
</object>
</child>
</object>
</child>
</object>
@@ -96,28 +69,4 @@
</object>
</child>
</template>
<object class="GtkSizeGroup" id="names">
<property name="mode">horizontal</property>
<widgets>
<widget name="name_heading"/>
</widgets>
</object>
<object class="GtkSizeGroup" id="types">
<property name="mode">horizontal</property>
<widgets>
<widget name="type_heading"/>
</widgets>
</object>
<object class="GtkSizeGroup" id="origins">
<property name="mode">horizontal</property>
<widgets>
<widget name="origin_heading"/>
</widgets>
</object>
<object class="GtkSizeGroup" id="values">
<property name="mode">horizontal</property>
<widgets>
<widget name="value_heading"/>
</widgets>
</object>
</interface>

View File

@@ -0,0 +1,106 @@
#include "resource-holder.h"
struct _ResourceHolder {
GObject instance;
char *name;
char *path;
int count;
gsize size;
GListModel *children;
ResourceHolder *parent;
};
G_DEFINE_TYPE (ResourceHolder, resource_holder, G_TYPE_OBJECT)
static void
resource_holder_init (ResourceHolder *holder)
{
}
static void
resource_holder_finalize (GObject *object)
{
ResourceHolder *holder = RESOURCE_HOLDER (object);
g_free (holder->name);
g_free (holder->path);
g_clear_object (&holder->children);
G_OBJECT_CLASS (resource_holder_parent_class)->finalize (object);
}
static void
resource_holder_class_init (ResourceHolderClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
object_class->finalize = resource_holder_finalize;
}
ResourceHolder *
resource_holder_new (const char *name,
const char *path,
int count,
gsize size,
GListModel *children)
{
ResourceHolder *holder;
holder = g_object_new (RESOURCE_TYPE_HOLDER, NULL);
holder->name = g_strdup (name);
holder->path = g_strdup (path);
holder->count = count;
holder->size = size;
g_set_object (&holder->children, children);
if (children)
{
int i;
for (i = 0; i < g_list_model_get_n_items (children); i++)
{
ResourceHolder *child = g_list_model_get_item (children, i);
child->parent = holder;
g_object_unref (child);
}
}
return holder;
}
const char *
resource_holder_get_name (ResourceHolder *holder)
{
return holder->name;
}
const char *
resource_holder_get_path (ResourceHolder *holder)
{
return holder->path;
}
int
resource_holder_get_count (ResourceHolder *holder)
{
return holder->count;
}
gsize
resource_holder_get_size (ResourceHolder *holder)
{
return holder->size;
}
GListModel *
resource_holder_get_children (ResourceHolder *holder)
{
return holder->children;
}
ResourceHolder *
resource_holder_get_parent (ResourceHolder *holder)
{
return holder->parent;
}

View File

@@ -0,0 +1,24 @@
#ifndef __RESOURCE_HOLDER_H__
#define __RESOURCE_HOLDER_H__
#include <gtk/gtk.h>
#define RESOURCE_TYPE_HOLDER (resource_holder_get_type ())
G_DECLARE_FINAL_TYPE (ResourceHolder, resource_holder, RESOURCE, HOLDER, GObject)
ResourceHolder * resource_holder_new (const char *name,
const char *path,
int count,
gsize size,
GListModel *children);
const char *resource_holder_get_name (ResourceHolder *holder);
const char *resource_holder_get_path (ResourceHolder *holder);
int resource_holder_get_count (ResourceHolder *holder);
gsize resource_holder_get_size (ResourceHolder *holder);
GListModel *resource_holder_get_children (ResourceHolder *holder);
ResourceHolder *resource_holder_get_parent (ResourceHolder *holder);
#endif /* __RESOURCE_HOLDER_H__ */

File diff suppressed because it is too large Load Diff

View File

@@ -30,6 +30,9 @@
<object class="GtkSearchEntry" id="search_entry">
<property name="max-width-chars">40</property>
<signal name="search-changed" handler="on_search_changed"/>
<signal name="next-match" handler="next_match"/>
<signal name="previous-match" handler="previous_match"/>
<signal name="stop-search" handler="stop_search"/>
</object>
</child>
<child>
@@ -54,56 +57,39 @@
<property name="vexpand">1</property>
<property name="hscrollbar-policy">never</property>
<child>
<object class="GtkTreeView" id="tree">
<property name="model">model</property>
<property name="enable-search">0</property>
<property name="enable-grid-lines">vertical</property>
<signal name="row-activated" handler="row_activated"/>
<child internal-child="selection">
<object class="GtkTreeSelection">
<signal name="changed" handler="on_selection_changed"/>
</object>
</child>
<object class="GtkColumnView" id="list">
<signal name="activate" handler="on_row_activated"/>
<child>
<object class="GtkTreeViewColumn" id="path_column">
<object class="GtkColumnViewColumn" id="path">
<property name="title" translatable="yes">Path</property>
<property name="resizable">1</property>
<property name="sort-column-id">0</property>
<child>
<object class="GtkCellRendererText">
<property name="scale">0.8</property>
<property name="ellipsize">end</property>
<property name="width-chars">10</property>
<property name="max-width-chars">5</property>
<property name="factory">
<object class="GtkSignalListItemFactory">
<signal name="setup" handler="setup_name_cb"/>
<signal name="bind" handler="bind_name_cb"/>
</object>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="count_column">
<object class="GtkColumnViewColumn" id="count">
<property name="title" translatable="yes">Count</property>
<property name="resizable">1</property>
<property name="sort-column-id">1</property>
<child>
<object class="GtkCellRendererText" id="count_renderer">
<property name="scale">0.8</property>
<property name="factory">
<object class="GtkSignalListItemFactory">
<signal name="setup" handler="setup_count_cb"/>
<signal name="bind" handler="bind_count_cb"/>
</object>
</child>
</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="size_column">
<object class="GtkColumnViewColumn" id="size">
<property name="title" translatable="yes">Size</property>
<property name="resizable">1</property>
<property name="sort-column-id">2</property>
<child>
<object class="GtkCellRendererText" id="size_renderer">
<property name="scale">0.8</property>
<property name="factory">
<object class="GtkSignalListItemFactory">
<signal name="setup" handler="setup_size_cb"/>
<signal name="bind" handler="bind_size_cb"/>
</object>
</child>
</property>
</object>
</child>
</object>

View File

@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gtk+ 2.4.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-28 09:12+0000\n"
"PO-Revision-Date: 2020-05-28 13:03+0300\n"
"POT-Creation-Date: 2020-05-31 05:35+0000\n"
"PO-Revision-Date: 2020-05-31 09:11+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
"Language: uk\n"
@@ -460,7 +460,7 @@ msgid "Whether to wrap the license text."
msgstr "Чи переносити рядку у тексті ліцензії."
#: gtk/gtkaccellabel.c:135 gtk/gtkbutton.c:225 gtk/gtkexpander.c:320
#: gtk/gtkframe.c:168 gtk/gtklabel.c:746 gtk/gtkmenubutton.c:422
#: gtk/gtkframe.c:168 gtk/gtklabel.c:745 gtk/gtkmenubutton.c:422
msgid "Label"
msgstr "Позначка"
@@ -469,12 +469,12 @@ msgid "The text displayed next to the accelerator"
msgstr "Текст, який буде показано поряд із акселератором"
#: gtk/gtkaccellabel.c:142 gtk/gtkbutton.c:232 gtk/gtkexpander.c:328
#: gtk/gtklabel.c:767 gtk/gtkmenubutton.c:429 gtk/gtkstack.c:431
#: gtk/gtklabel.c:766 gtk/gtkmenubutton.c:429 gtk/gtkstack.c:431
msgid "Use underline"
msgstr "Використовувати підкреслення"
#: gtk/gtkaccellabel.c:143 gtk/gtkbutton.c:233 gtk/gtkexpander.c:329
#: gtk/gtklabel.c:768 gtk/gtkmenubutton.c:430
#: gtk/gtklabel.c:767 gtk/gtkmenubutton.c:430
msgid ""
"If set, an underline in the text indicates the next character should be used "
"for the mnemonic accelerator key"
@@ -744,7 +744,7 @@ msgstr ""
#: gtk/gtkdragicon.c:372 gtk/gtkexpander.c:366 gtk/gtkflowbox.c:513
#: gtk/gtkframe.c:190 gtk/gtklistbox.c:3455 gtk/gtknotebook.c:570
#: gtk/gtkoverlay.c:319 gtk/gtkpopover.c:1665 gtk/gtkrevealer.c:354
#: gtk/gtkscrolledwindow.c:759 gtk/gtksearchbar.c:316 gtk/gtkstack.c:381
#: gtk/gtkscrolledwindow.c:758 gtk/gtksearchbar.c:316 gtk/gtkstack.c:381
#: gtk/gtkviewport.c:390 gtk/gtkwindow.c:946 gtk/gtkwindowhandle.c:546
msgid "Child"
msgstr "Вкладений елемент"
@@ -752,7 +752,7 @@ msgstr "Вкладений елемент"
#: gtk/gtkaspectframe.c:167 gtk/gtkbutton.c:254 gtk/gtkexpander.c:367
#: gtk/gtkflowbox.c:514 gtk/gtkframe.c:191 gtk/gtklistbox.c:3456
#: gtk/gtkoverlay.c:320 gtk/gtkpopover.c:1666 gtk/gtkrevealer.c:355
#: gtk/gtkscrolledwindow.c:760 gtk/gtksearchbar.c:317 gtk/gtkviewport.c:391
#: gtk/gtkscrolledwindow.c:759 gtk/gtksearchbar.c:317 gtk/gtkviewport.c:391
#: gtk/gtkwindow.c:947 gtk/gtkwindowhandle.c:547
msgid "The child widget"
msgstr "Дочірній віджет"
@@ -806,7 +806,7 @@ msgid "The pages of the assistant."
msgstr "Сторінки помічника."
#: gtk/gtkbox.c:259 gtk/gtkboxlayout.c:730 gtk/gtkcellareabox.c:317
#: gtk/gtkiconview.c:473 gtk/gtktreeviewcolumn.c:304
#: gtk/gtkiconview.c:472 gtk/gtktreeviewcolumn.c:304
msgid "Spacing"
msgstr "Інтервал"
@@ -840,27 +840,27 @@ msgstr "Розподілити рівномірно за простором"
msgid "Spacing between widgets"
msgstr "Інтервал між віджетами"
#: gtk/gtkbuilder.c:311
#: gtk/gtkbuilder.c:313
msgid "Translation Domain"
msgstr "Домен перекладу"
#: gtk/gtkbuilder.c:312
#: gtk/gtkbuilder.c:314
msgid "The translation domain used by gettext"
msgstr "Домен перекладу, що використовується gettext"
#: gtk/gtkbuilder.c:323
#: gtk/gtkbuilder.c:325
msgid "Current object"
msgstr "Поточний об'єкт"
#: gtk/gtkbuilder.c:324
#: gtk/gtkbuilder.c:326
msgid "The object the builder is evaluating for"
msgstr "Об'єкт для оцінки збиральником"
#: gtk/gtkbuilder.c:335 gtk/gtkshortcutcontroller.c:550
#: gtk/gtkbuilder.c:337 gtk/gtkshortcutcontroller.c:551
msgid "Scope"
msgstr "Область"
#: gtk/gtkbuilder.c:336
#: gtk/gtkbuilder.c:338
msgid "The scope the builder is operating in"
msgstr "Область, у якій працює будівник"
@@ -871,7 +871,7 @@ msgid ""
msgstr "Текст віджета позначки в кнопці, якщо кнопка містить віджет позначки"
#: gtk/gtkbutton.c:239 gtk/gtkcombobox.c:671 gtk/gtkentry.c:469
#: gtk/gtkscrolledwindow.c:641
#: gtk/gtkscrolledwindow.c:640
msgid "Has Frame"
msgstr "Має рамку"
@@ -1187,10 +1187,10 @@ msgstr "Встановлення тла комірки"
msgid "Whether the cell background color is set"
msgstr "Чи встановлено колір тла комірки"
#: gtk/gtkcellrenderercombo.c:136 gtk/gtkfilterlistmodel.c:416
#: gtk/gtkcellrenderercombo.c:136 gtk/gtkfilterlistmodel.c:683
#: gtk/gtkflattenlistmodel.c:438 gtk/gtkmaplistmodel.c:404
#: gtk/gtkshortcutcontroller.c:538 gtk/gtkslicelistmodel.c:287
#: gtk/gtksortlistmodel.c:338 gtk/gtktreelistmodel.c:716
#: gtk/gtkshortcutcontroller.c:539 gtk/gtkslicelistmodel.c:287
#: gtk/gtksortlistmodel.c:394 gtk/gtktreelistmodel.c:716
msgid "Model"
msgstr "Модель"
@@ -1377,7 +1377,7 @@ msgstr "Розмітка"
msgid "Marked up text to render"
msgstr "Розмітка тексту до візуалізації"
#: gtk/gtkcellrenderertext.c:269 gtk/gtkentry.c:890 gtk/gtklabel.c:753
#: gtk/gtkcellrenderertext.c:269 gtk/gtkentry.c:890 gtk/gtklabel.c:752
#: gtk/gtktext.c:894
msgid "Attributes"
msgstr "Атрибути"
@@ -1536,7 +1536,7 @@ msgstr ""
"під час відтворення тексту. Якщо ви не розумієте цей параметр, то, напевно, "
"він вам не потрібний."
#: gtk/gtkcellrenderertext.c:446 gtk/gtklabel.c:873 gtk/gtkprogressbar.c:246
#: gtk/gtkcellrenderertext.c:446 gtk/gtklabel.c:872 gtk/gtkprogressbar.c:246
msgid "Ellipsize"
msgstr "Овал"
@@ -1549,15 +1549,15 @@ msgstr ""
"для показу всього рядка"
#: gtk/gtkcellrenderertext.c:463 gtk/gtkfilechooserbutton.c:524
#: gtk/gtklabel.c:891
#: gtk/gtklabel.c:890
msgid "Width In Characters"
msgstr "Ширина у символах"
#: gtk/gtkcellrenderertext.c:464 gtk/gtklabel.c:892
#: gtk/gtkcellrenderertext.c:464 gtk/gtklabel.c:891
msgid "The desired width of the label, in characters"
msgstr "Бажана ширина, у символах"
#: gtk/gtkcellrenderertext.c:483 gtk/gtklabel.c:925
#: gtk/gtkcellrenderertext.c:483 gtk/gtklabel.c:924
msgid "Maximum Width In Characters"
msgstr "Максимальна ширина в символах"
@@ -1772,12 +1772,12 @@ msgstr "Модель CellView"
msgid "The model for cell view"
msgstr "Модель для перегляду комірки"
#: gtk/gtkcellview.c:215 gtk/gtkentrycompletion.c:439 gtk/gtkiconview.c:584
#: gtk/gtkcellview.c:215 gtk/gtkentrycompletion.c:439 gtk/gtkiconview.c:583
#: gtk/gtktreepopover.c:213 gtk/gtktreeviewcolumn.c:423
msgid "Cell Area"
msgstr "Ділянка комірки"
#: gtk/gtkcellview.c:216 gtk/gtkentrycompletion.c:440 gtk/gtkiconview.c:585
#: gtk/gtkcellview.c:216 gtk/gtkentrycompletion.c:440 gtk/gtkiconview.c:584
#: gtk/gtktreepopover.c:214 gtk/gtktreeviewcolumn.c:424
msgid "The GtkCellArea used to layout cells"
msgstr "GtkCellArea для компонування комірок"
@@ -1891,7 +1891,7 @@ msgstr "Колір RGBA"
msgid "Color as RGBA"
msgstr "Колір як RGBA"
#: gtk/gtkcolorswatch.c:485 gtk/gtklabel.c:836 gtk/gtklistbox.c:3448
#: gtk/gtkcolorswatch.c:485 gtk/gtklabel.c:835 gtk/gtklistbox.c:3448
msgid "Selectable"
msgstr "Вибирається"
@@ -2283,11 +2283,11 @@ msgstr "Максимальна ширина у символах"
msgid "The desired maximum width of the entry, in characters"
msgstr "Бажана максимальна ширина поля введення, у символах"
#: gtk/gtkeditable.c:423 gtk/gtklabel.c:790
#: gtk/gtkeditable.c:423 gtk/gtklabel.c:789
msgid "X align"
msgstr "Вирівнювання за X"
#: gtk/gtkeditable.c:424 gtk/gtklabel.c:791
#: gtk/gtkeditable.c:424 gtk/gtklabel.c:790
msgid ""
"The horizontal alignment, from 0 (left) to 1 (right). Reversed for RTL "
"layouts."
@@ -2603,7 +2603,7 @@ msgstr "Піктограма емодзі"
msgid "Whether to show an icon for Emoji"
msgstr "Чи слід показувати піктограму емодзі"
#: gtk/gtkentry.c:928 gtk/gtklabel.c:955 gtk/gtkpasswordentry.c:418
#: gtk/gtkentry.c:928 gtk/gtklabel.c:954 gtk/gtkpasswordentry.c:418
#: gtk/gtktext.c:940 gtk/gtktextview.c:1078
msgid "Extra menu"
msgstr "Додаткове меню"
@@ -2636,7 +2636,7 @@ msgstr "Мінімальна довжина ключа"
msgid "Minimum length of the search key in order to look up matches"
msgstr "Мінімальна довжина ключа, при пошуку відповідностей"
#: gtk/gtkentrycompletion.c:354 gtk/gtkiconview.c:402
#: gtk/gtkentrycompletion.c:354 gtk/gtkiconview.c:401
msgid "Text column"
msgstr "Текстовий стовпчик"
@@ -2741,11 +2741,11 @@ msgstr "Чи розширювач був відкритий для показу
msgid "Text of the expanders label"
msgstr "Текст мітки розгортання"
#: gtk/gtkexpander.c:336 gtk/gtklabel.c:760 gtk/gtkmodelbutton.c:1149
#: gtk/gtkexpander.c:336 gtk/gtklabel.c:759 gtk/gtkmodelbutton.c:1149
msgid "Use markup"
msgstr "Використовувати розмітку"
#: gtk/gtkexpander.c:337 gtk/gtklabel.c:761
#: gtk/gtkexpander.c:337 gtk/gtklabel.c:760
msgid "The text of the label includes XML markup. See pango_parse_markup()"
msgstr "Текст позначки включає розмітку XML. Див. pango_parse_markup()"
@@ -2797,7 +2797,7 @@ msgstr "Дія"
msgid "The type of operation that the file selector is performing"
msgstr "Тип операції, яку виконує діалог вибору файлів"
#: gtk/gtkfilechooser.c:160
#: gtk/gtkfilechooser.c:160 gtk/gtkfilterlistmodel.c:659
msgid "Filter"
msgstr "Фільтр"
@@ -2854,27 +2854,24 @@ msgstr "Підзаголовок"
msgid "The human-readable name for this filter"
msgstr "Зручна для читання назва цього фільтра"
#: gtk/gtkfilterlistmodel.c:392
msgid "has filter"
msgstr "має фільтр"
#: gtk/gtkfilterlistmodel.c:660
#| msgid "If a filter is set for this model"
msgid "The filter set for this model"
msgstr "Набір фільтрів для цієї моделі"
#: gtk/gtkfilterlistmodel.c:393
msgid "If a filter is set for this model"
msgstr "Чи встановлено фільтр для цієї моделі"
#: gtk/gtkfilterlistmodel.c:404 gtk/gtkflattenlistmodel.c:426
#: gtk/gtkfilterlistmodel.c:671 gtk/gtkflattenlistmodel.c:426
#: gtk/gtkmaplistmodel.c:392 gtk/gtkpropertylookuplistmodel.c:376
#: gtk/gtkslicelistmodel.c:275 gtk/gtksortlistmodel.c:326
#: gtk/gtkslicelistmodel.c:275 gtk/gtksortlistmodel.c:382
msgid "Item type"
msgstr "Тип запису"
#: gtk/gtkfilterlistmodel.c:405 gtk/gtkflattenlistmodel.c:427
#: gtk/gtkfilterlistmodel.c:672 gtk/gtkflattenlistmodel.c:427
#: gtk/gtkmaplistmodel.c:393 gtk/gtkpropertylookuplistmodel.c:377
#: gtk/gtkslicelistmodel.c:276
msgid "The type of elements of this object"
msgstr "Тип елементів цього об'єкта"
#: gtk/gtkfilterlistmodel.c:417
#: gtk/gtkfilterlistmodel.c:684
msgid "The model being filtered"
msgstr "Модель, яка фільтрується"
@@ -2890,22 +2887,22 @@ msgstr "Перетворення дочірнього об'єкта із фік
msgid "The model being flattened"
msgstr "Модель, яка сплощується"
#: gtk/gtkflowbox.c:3578 gtk/gtkiconview.c:369 gtk/gtklistbox.c:488
#: gtk/gtkflowbox.c:3578 gtk/gtkiconview.c:368 gtk/gtklistbox.c:488
#: gtk/gtktreeselection.c:140
msgid "Selection mode"
msgstr "Режим виділення"
#: gtk/gtkflowbox.c:3579 gtk/gtkiconview.c:370 gtk/gtklistbox.c:489
#: gtk/gtkflowbox.c:3579 gtk/gtkiconview.c:369 gtk/gtklistbox.c:489
msgid "The selection mode"
msgstr "Режим виділення"
#: gtk/gtkflowbox.c:3592 gtk/gtkiconview.c:598 gtk/gtklistbox.c:496
#: gtk/gtktreeview.c:1205
#: gtk/gtkflowbox.c:3592 gtk/gtkiconview.c:597 gtk/gtklistbox.c:496
#: gtk/gtktreeview.c:1203
msgid "Activate on Single Click"
msgstr "Активувати одиночним клацанням"
#: gtk/gtkflowbox.c:3593 gtk/gtkiconview.c:599 gtk/gtklistbox.c:497
#: gtk/gtktreeview.c:1206
#: gtk/gtkflowbox.c:3593 gtk/gtkiconview.c:598 gtk/gtklistbox.c:497
#: gtk/gtktreeview.c:1204
msgid "Activate row on a single click"
msgstr "Активувати рядок одиночним клацанням"
@@ -3017,11 +3014,11 @@ msgstr "Параметри шрифту у форматі рядка"
msgid "Language for which features have been selected"
msgstr "Мова, для якої були вибрані параметри"
#: gtk/gtkfontchooserwidget.c:740
#: gtk/gtkfontchooserwidget.c:664
msgid "The tweak action"
msgstr "Дія коригування"
#: gtk/gtkfontchooserwidget.c:741
#: gtk/gtkfontchooserwidget.c:665
msgid "The toggle action to switch to the tweak page"
msgstr "Увімкнути дію для перемикання сторінки коригування"
@@ -3252,7 +3249,6 @@ msgid "Icon name"
msgstr "Назва піктограми"
#: gtk/gtkicontheme.c:3588
#| msgid "The icon name choosen during lookup"
msgid "The icon name chosen during lookup"
msgstr "Назва піктограми, яку вибрано під час пошуку"
@@ -3264,112 +3260,112 @@ msgstr "Є символічною"
msgid "If the icon is symbolic"
msgstr "Чи є піктограма символічною"
#: gtk/gtkiconview.c:386
#: gtk/gtkiconview.c:385
msgid "Pixbuf column"
msgstr "Стовпчик pixbuf"
#: gtk/gtkiconview.c:387
#: gtk/gtkiconview.c:386
msgid "Model column used to retrieve the icon pixbuf from"
msgstr ""
"Модель стовпця, що використовується для отримання зображення (pixbuf) значка"
#: gtk/gtkiconview.c:403
#: gtk/gtkiconview.c:402
msgid "Model column used to retrieve the text from"
msgstr "Модель стовпчика, що використовується для отримання з неї тексту"
#: gtk/gtkiconview.c:420
#: gtk/gtkiconview.c:419
msgid "Markup column"
msgstr "Розмітка стовпчика"
#: gtk/gtkiconview.c:421
#: gtk/gtkiconview.c:420
msgid "Model column used to retrieve the text if using Pango markup"
msgstr ""
"Модель стовпчика, що використовується для тримання з неї тексту, якщо "
"використовується розмітка pango"
#: gtk/gtkiconview.c:428
#: gtk/gtkiconview.c:427
msgid "Icon View Model"
msgstr "Модель Icon View"
#: gtk/gtkiconview.c:429
#: gtk/gtkiconview.c:428
msgid "The model for the icon view"
msgstr "Модель для перегляду у вигляді значків"
#: gtk/gtkiconview.c:443
#: gtk/gtkiconview.c:442
msgid "Number of columns"
msgstr "Кількість стовпчиків"
#: gtk/gtkiconview.c:444
#: gtk/gtkiconview.c:443
msgid "Number of columns to display"
msgstr "Кількість стовпчиків, які показуються"
#: gtk/gtkiconview.c:459
#: gtk/gtkiconview.c:458
msgid "Width for each item"
msgstr "Віджет для кожного елемента"
#: gtk/gtkiconview.c:460
#: gtk/gtkiconview.c:459
msgid "The width used for each item"
msgstr "Ширина, що використовується для кожного елемента"
#: gtk/gtkiconview.c:474
#: gtk/gtkiconview.c:473
msgid "Space which is inserted between cells of an item"
msgstr "Простір, що вставляється між комірками елемента"
#: gtk/gtkiconview.c:487
#: gtk/gtkiconview.c:486
msgid "Row Spacing"
msgstr "Міжрядковий інтервал"
#: gtk/gtkiconview.c:488
#: gtk/gtkiconview.c:487
msgid "Space which is inserted between grid rows"
msgstr "Простір, що вставляється між рядками сітки"
#: gtk/gtkiconview.c:501
#: gtk/gtkiconview.c:500
msgid "Column Spacing"
msgstr "Інтервал між стовпчиками"
#: gtk/gtkiconview.c:502
#: gtk/gtkiconview.c:501
msgid "Space which is inserted between grid columns"
msgstr "Простір, що вставляється між стовпчиками сітки"
#: gtk/gtkiconview.c:515
#: gtk/gtkiconview.c:514
msgid "Margin"
msgstr "Відступ"
#: gtk/gtkiconview.c:516
#: gtk/gtkiconview.c:515
msgid "Space which is inserted at the edges of the icon view"
msgstr "Простір, що вставляється на краях перегляду піктограми"
#: gtk/gtkiconview.c:529
#: gtk/gtkiconview.c:528
msgid "Item Orientation"
msgstr "Орієнтація пункту "
#: gtk/gtkiconview.c:530
#: gtk/gtkiconview.c:529
msgid ""
"How the text and icon of each item are positioned relative to each other"
msgstr ""
"Як текст та значки кожного елемента розташовуються один відносно іншого"
#: gtk/gtkiconview.c:544 gtk/gtktreeview.c:1071 gtk/gtktreeviewcolumn.c:379
#: gtk/gtkiconview.c:543 gtk/gtktreeview.c:1069 gtk/gtktreeviewcolumn.c:379
msgid "Reorderable"
msgstr "Дозволено перестановку"
#: gtk/gtkiconview.c:545 gtk/gtktreeview.c:1072
#: gtk/gtkiconview.c:544 gtk/gtktreeview.c:1070
msgid "View is reorderable"
msgstr "Перегляд можна перегрупувати"
#: gtk/gtkiconview.c:552 gtk/gtktreeview.c:1191
#: gtk/gtkiconview.c:551 gtk/gtktreeview.c:1189
msgid "Tooltip Column"
msgstr "Стовпчик підказки"
#: gtk/gtkiconview.c:553
#: gtk/gtkiconview.c:552
msgid "The column in the model containing the tooltip texts for the items"
msgstr "Стовпчик у моделі, що містить текстову підказку для елементів"
#: gtk/gtkiconview.c:568
#: gtk/gtkiconview.c:567
msgid "Item Padding"
msgstr "Доповнення елемента"
#: gtk/gtkiconview.c:569
#: gtk/gtkiconview.c:568
msgid "Padding around icon view items"
msgstr "Доповнення навколо значків"
@@ -3449,19 +3445,19 @@ msgstr "Чи потрібно додавати стандартну кнопку
msgid "Controls whether the info bar shows its contents or not"
msgstr "Керує тим, чи буде показано вміст інформаційної панелі"
#: gtk/gtklabel.c:747
#: gtk/gtklabel.c:746
msgid "The text of the label"
msgstr "Текст позначки"
#: gtk/gtklabel.c:754
#: gtk/gtklabel.c:753
msgid "A list of style attributes to apply to the text of the label"
msgstr "Список стильових ознак для застосування до тексту позначки"
#: gtk/gtklabel.c:774 gtk/gtktexttag.c:386 gtk/gtktextview.c:877
#: gtk/gtklabel.c:773 gtk/gtktexttag.c:386 gtk/gtktextview.c:877
msgid "Justification"
msgstr "Вирівнювання"
#: gtk/gtklabel.c:775
#: gtk/gtklabel.c:774
msgid ""
"The alignment of the lines in the text of the label relative to each other. "
"This does NOT affect the alignment of the label within its allocation. See "
@@ -3471,80 +3467,80 @@ msgstr ""
"вирівнювання мітки всередині вказаного для неї місця. З цього питання див. "
"GtkLabel::xalign"
#: gtk/gtklabel.c:806
#: gtk/gtklabel.c:805
msgid "Y align"
msgstr "Вирівнювання за Y"
#: gtk/gtklabel.c:807
#: gtk/gtklabel.c:806
msgid "The vertical alignment, from 0 (top) to 1 (bottom)"
msgstr "Вертикальне вирівнювання, від 0 (вгору) до 1 (вниз)"
#: gtk/gtklabel.c:814
#: gtk/gtklabel.c:813
msgid "Line wrap"
msgstr "Перенос рядків"
#: gtk/gtklabel.c:815
#: gtk/gtklabel.c:814
msgid "If set, wrap lines if the text becomes too wide"
msgstr "Якщо встановлено, занадто довгі рядки переносяться"
#: gtk/gtklabel.c:828
#: gtk/gtklabel.c:827
msgid "Line wrap mode"
msgstr "Режим переносу рядків"
#: gtk/gtklabel.c:829
#: gtk/gtklabel.c:828
msgid "If wrap is set, controls how linewrapping is done"
msgstr ""
"Якщо встановлено перенос рядків, контролює як виконувати перенос рядків"
#: gtk/gtklabel.c:837
#: gtk/gtklabel.c:836
msgid "Whether the label text can be selected with the mouse"
msgstr "Чи може текст позначки бути виділений використовуючи мишу"
#: gtk/gtklabel.c:843
#: gtk/gtklabel.c:842
msgid "Mnemonic key"
msgstr "Мнемонічна клавіша"
#: gtk/gtklabel.c:844
#: gtk/gtklabel.c:843
msgid "The mnemonic accelerator key for this label"
msgstr "Мнемонічна клавіша-прискорювач для цієї позначки"
#: gtk/gtklabel.c:851
#: gtk/gtklabel.c:850
msgid "Mnemonic widget"
msgstr "Мнемонічний віджет"
#: gtk/gtklabel.c:852
#: gtk/gtklabel.c:851
msgid "The widget to be activated when the labels mnemonic key is pressed"
msgstr ""
"Віджет, який буде активовано під час натиснення мнемонічної клавіші позначки"
#: gtk/gtklabel.c:874
#: gtk/gtklabel.c:873
msgid ""
"The preferred place to ellipsize the string, if the label does not have "
"enough room to display the entire string"
msgstr ""
"Бажане місце для овалу рядка, якщо для показу усього рядка не вистачає місця."
#: gtk/gtklabel.c:908
#: gtk/gtklabel.c:907
msgid "Single Line Mode"
msgstr "Режим одного рядка"
#: gtk/gtklabel.c:909
#: gtk/gtklabel.c:908
msgid "Whether the label is in single line mode"
msgstr "Чи знаходиться рядок у режимі одного рядка"
#: gtk/gtklabel.c:926
#: gtk/gtklabel.c:925
msgid "The desired maximum width of the label, in characters"
msgstr "Бажана максимальна ширина ярлика, у символах"
#: gtk/gtklabel.c:941
#: gtk/gtklabel.c:940
msgid "Number of lines"
msgstr "Кількість ліній"
#: gtk/gtklabel.c:942
#: gtk/gtklabel.c:941
msgid "The desired number of lines, when ellipsizing a wrapping label"
msgstr "Число рядків при скороченні мітки з використанням трьох крапок"
#: gtk/gtklabel.c:956 gtk/gtktext.c:941 gtk/gtktextview.c:1079
#: gtk/gtklabel.c:955 gtk/gtktext.c:941 gtk/gtktextview.c:1079
msgid "Menu model to append to the context menu"
msgstr "Модель меню для долучення до контекстного меню"
@@ -3819,7 +3815,7 @@ msgstr "Гучність"
msgid "Volume of the audio stream."
msgstr "Гучність відтворення потоку звукових даних."
#: gtk/gtkmenubutton.c:370 gtk/gtkpopovermenubar.c:595 gtk/gtkpopovermenu.c:518
#: gtk/gtkmenubutton.c:370 gtk/gtkpopovermenubar.c:593 gtk/gtkpopovermenu.c:517
msgid "Menu model"
msgstr "Модель меню"
@@ -4503,19 +4499,19 @@ msgstr "Мнемоніка видима"
msgid "Whether mnemonics are currently visible in this popover"
msgstr "Чи показано мнемоніку у цьому накладному меню"
#: gtk/gtkpopovermenubar.c:596
#: gtk/gtkpopovermenubar.c:594
msgid "The model from which the bar is made."
msgstr "Модель, на основі якої створено панель."
#: gtk/gtkpopovermenu.c:510
#: gtk/gtkpopovermenu.c:509
msgid "Visible submenu"
msgstr "Видиме підменю"
#: gtk/gtkpopovermenu.c:511
#: gtk/gtkpopovermenu.c:510
msgid "The name of the visible submenu"
msgstr "Назва видимого підменю"
#: gtk/gtkpopovermenu.c:519
#: gtk/gtkpopovermenu.c:518
msgid "The model from which the menu is made."
msgstr "Модель, для якої створено меню."
@@ -5054,105 +5050,105 @@ msgstr "Політика вертикальної прокрутки"
msgid "The GtkAdjustment that contains the current value of this scrollbar"
msgstr "Об'єкт GtkAdjustment, що містить поточне значення цієї смужки гортання"
#: gtk/gtkscrolledwindow.c:603
#: gtk/gtkscrolledwindow.c:602
msgid "Horizontal Adjustment"
msgstr "Горизонтальне вирівнювання"
#: gtk/gtkscrolledwindow.c:604
#: gtk/gtkscrolledwindow.c:603
msgid "The GtkAdjustment for the horizontal position"
msgstr "Об'єкт GtkAdjustment для горизонтальної позиції"
#: gtk/gtkscrolledwindow.c:610
#: gtk/gtkscrolledwindow.c:609
msgid "Vertical Adjustment"
msgstr "Вертикальне вирівнювання"
#: gtk/gtkscrolledwindow.c:611
#: gtk/gtkscrolledwindow.c:610
msgid "The GtkAdjustment for the vertical position"
msgstr "Об'єкт GtkAdjustment для вертикальної позиції"
#: gtk/gtkscrolledwindow.c:617
#: gtk/gtkscrolledwindow.c:616
msgid "Horizontal Scrollbar Policy"
msgstr "Правило горизонтальної прокрутки"
#: gtk/gtkscrolledwindow.c:618
#: gtk/gtkscrolledwindow.c:617
msgid "When the horizontal scrollbar is displayed"
msgstr "Коли показано горизонтальну панель прокрутки"
#: gtk/gtkscrolledwindow.c:625
#: gtk/gtkscrolledwindow.c:624
msgid "Vertical Scrollbar Policy"
msgstr "Правило вертикальної прокрутки"
#: gtk/gtkscrolledwindow.c:626
#: gtk/gtkscrolledwindow.c:625
msgid "When the vertical scrollbar is displayed"
msgstr "Коли показано вертикальну панель прокрутки"
#: gtk/gtkscrolledwindow.c:633
#: gtk/gtkscrolledwindow.c:632
msgid "Window Placement"
msgstr "Розміщення вікна"
#: gtk/gtkscrolledwindow.c:634
#: gtk/gtkscrolledwindow.c:633
msgid "Where the contents are located with respect to the scrollbars."
msgstr "Чи розташовувати вміст у відповідності зі смугами гортання."
#: gtk/gtkscrolledwindow.c:642
#: gtk/gtkscrolledwindow.c:641
msgid "Whether to draw a frame around the contents"
msgstr "Чи слід малювати рамку навколо вмісту"
#: gtk/gtkscrolledwindow.c:653
#: gtk/gtkscrolledwindow.c:652
msgid "Minimum Content Width"
msgstr "Мінімальна ширина вмісту"
#: gtk/gtkscrolledwindow.c:654
#: gtk/gtkscrolledwindow.c:653
msgid "The minimum width that the scrolled window will allocate to its content"
msgstr "Мінімальна ширина, яку вікна прокрутки виділять з його вмістом"
#: gtk/gtkscrolledwindow.c:665
#: gtk/gtkscrolledwindow.c:664
msgid "Minimum Content Height"
msgstr "Мінімальна висота вмісту"
#: gtk/gtkscrolledwindow.c:666
#: gtk/gtkscrolledwindow.c:665
msgid ""
"The minimum height that the scrolled window will allocate to its content"
msgstr "Мінімальна висота, яку вікна прокрутки виділять з його вмістом"
#: gtk/gtkscrolledwindow.c:678
#: gtk/gtkscrolledwindow.c:677
msgid "Kinetic Scrolling"
msgstr "Кінетичне прокручування"
#: gtk/gtkscrolledwindow.c:679
#: gtk/gtkscrolledwindow.c:678
msgid "Kinetic scrolling mode."
msgstr "Режим кінетичного прокручування."
#: gtk/gtkscrolledwindow.c:696
#: gtk/gtkscrolledwindow.c:695
msgid "Overlay Scrolling"
msgstr "Накладні смуги гортання"
#: gtk/gtkscrolledwindow.c:697
#: gtk/gtkscrolledwindow.c:696
msgid "Overlay scrolling mode"
msgstr "Режим накладних смуг гортання"
#: gtk/gtkscrolledwindow.c:708
#: gtk/gtkscrolledwindow.c:707
msgid "Maximum Content Width"
msgstr "Максимальна ширина вмісту"
#: gtk/gtkscrolledwindow.c:709
#: gtk/gtkscrolledwindow.c:708
msgid "The maximum width that the scrolled window will allocate to its content"
msgstr "Максимальна ширина, яку вікна зі смужками гортання матимуть для вмісту"
#: gtk/gtkscrolledwindow.c:720
#: gtk/gtkscrolledwindow.c:719
msgid "Maximum Content Height"
msgstr "Максимальна висота вмісту"
#: gtk/gtkscrolledwindow.c:721
#: gtk/gtkscrolledwindow.c:720
msgid ""
"The maximum height that the scrolled window will allocate to its content"
msgstr "Максимальна висота, яку вікна зі смужками гортання матимуть для вмісту"
#: gtk/gtkscrolledwindow.c:736 gtk/gtkscrolledwindow.c:737
#: gtk/gtkscrolledwindow.c:735 gtk/gtkscrolledwindow.c:736
msgid "Propagate Natural Width"
msgstr "Передавати природну ширину"
#: gtk/gtkscrolledwindow.c:752 gtk/gtkscrolledwindow.c:753
#: gtk/gtkscrolledwindow.c:751 gtk/gtkscrolledwindow.c:752
msgid "Propagate Natural Height"
msgstr "Передавати природну висоту"
@@ -5591,19 +5587,19 @@ msgstr "Чи показувати курсор у тексті"
msgid "Whether to use overlay scrollbars"
msgstr "Чи використовувати накладання смужок гортання"
#: gtk/gtkshortcutaction.c:935
#: gtk/gtkshortcutaction.c:942
msgid "Signal Name"
msgstr "Назва сигналу"
#: gtk/gtkshortcutaction.c:936
#: gtk/gtkshortcutaction.c:943
msgid "The name of the signal to emit"
msgstr "Назва сигналу, який слід надіслати"
#: gtk/gtkshortcutaction.c:1174 gtk/gtkshortcutsshortcut.c:718
#: gtk/gtkshortcutaction.c:1181 gtk/gtkshortcutsshortcut.c:718
msgid "Action Name"
msgstr "Назва дії"
#: gtk/gtkshortcutaction.c:1175
#: gtk/gtkshortcutaction.c:1182
msgid "The name of the action to activate"
msgstr "Назва дії для активації"
@@ -5627,21 +5623,21 @@ msgstr "Перемикач"
msgid "The trigger for this shortcut"
msgstr "Перемикач для цього скорочення"
#: gtk/gtkshortcutcontroller.c:525
#: gtk/gtkshortcutcontroller.c:526
msgid "Mnemonic modifers"
msgstr "Модифікатори мнемоніки"
#: gtk/gtkshortcutcontroller.c:526
#: gtk/gtkshortcutcontroller.c:527
msgid "The modifiers to be pressed to allow mnemonics activation"
msgstr ""
"Клавіші-модифікатори, які має бути натиснуто, щоб уможливити активацію "
"мнемоніки"
#: gtk/gtkshortcutcontroller.c:539
#: gtk/gtkshortcutcontroller.c:540
msgid "A list model to take shortcuts from"
msgstr "Модель списку, з якої слід брати скорочення"
#: gtk/gtkshortcutcontroller.c:551
#: gtk/gtkshortcutcontroller.c:552
msgid "What scope the shortcuts will be handled in"
msgstr "Область, у якій оброблятимуться скорочення"
@@ -5823,19 +5819,21 @@ msgstr "Зсув зрізу"
msgid "Maximum size of slice"
msgstr "Максимальний розмір зрізу"
#: gtk/gtksortlistmodel.c:314
msgid "has sort"
msgstr "має упорядкування"
#: gtk/gtksortlistmodel.c:370
#| msgid "Sort order"
msgid "Sorter"
msgstr "Сортувальник"
#: gtk/gtksortlistmodel.c:315
msgid "If a sort function is set for this model"
msgstr "Чи встановлено функцію упорядкування для цієї моделі"
#: gtk/gtksortlistmodel.c:371
#| msgid "The trigger for this shortcut"
msgid "The sorter for this model"
msgstr "Сортувальник для цієї моделі"
#: gtk/gtksortlistmodel.c:327
#: gtk/gtksortlistmodel.c:383
msgid "The type of items of this list"
msgstr "Тип пунктів у цьому списку"
#: gtk/gtksortlistmodel.c:339
#: gtk/gtksortlistmodel.c:395
msgid "The model being sorted"
msgstr "Модель, яка зберігається"
@@ -6750,126 +6748,126 @@ msgstr "модель"
msgid "The model for the popover"
msgstr "Модель для накладного меню"
#: gtk/gtktreeview.c:1043
#: gtk/gtktreeview.c:1041
msgid "TreeView Model"
msgstr "Модель TreeView"
#: gtk/gtktreeview.c:1044
#: gtk/gtktreeview.c:1042
msgid "The model for the tree view"
msgstr "Модель для перегляду у вигляді дерева"
#: gtk/gtktreeview.c:1050
#: gtk/gtktreeview.c:1048
msgid "Headers Visible"
msgstr "Заголовки видимі"
#: gtk/gtktreeview.c:1051
#: gtk/gtktreeview.c:1049
msgid "Show the column header buttons"
msgstr "Показувати кнопки заголовків стовпчиків"
#: gtk/gtktreeview.c:1057
#: gtk/gtktreeview.c:1055
msgid "Headers Clickable"
msgstr "Заголовки натискаються"
#: gtk/gtktreeview.c:1058
#: gtk/gtktreeview.c:1056
msgid "Column headers respond to click events"
msgstr "Заголовки стовпчиків відповідають на події клацання"
#: gtk/gtktreeview.c:1064
#: gtk/gtktreeview.c:1062
msgid "Expander Column"
msgstr "Колонка-розширювач"
#: gtk/gtktreeview.c:1065
#: gtk/gtktreeview.c:1063
msgid "Set the column for the expander column"
msgstr "Встановити колонку для розширювача"
#: gtk/gtktreeview.c:1078
#: gtk/gtktreeview.c:1076
msgid "Enable Search"
msgstr "Дозволено пошук"
#: gtk/gtktreeview.c:1079
#: gtk/gtktreeview.c:1077
msgid "View allows user to search through columns interactively"
msgstr ""
"Перегляд дозволяє користувачу виконувати пошук у стовпчиках в інтерактивному "
"режимі"
#: gtk/gtktreeview.c:1085
#: gtk/gtktreeview.c:1083
msgid "Search Column"
msgstr "Стовпчик пошуку"
#: gtk/gtktreeview.c:1086
#: gtk/gtktreeview.c:1084
msgid "Model column to search through during interactive search"
msgstr ""
"Стовпчик моделі, за яким слід виконати інтерактивний пошук в міру набору"
#: gtk/gtktreeview.c:1102
#: gtk/gtktreeview.c:1100
msgid "Fixed Height Mode"
msgstr "Режим фіксованої висоти"
#: gtk/gtktreeview.c:1103
#: gtk/gtktreeview.c:1101
msgid "Speeds up GtkTreeView by assuming that all rows have the same height"
msgstr "Прискорює GtkTreeView, вважаючи що всі рядки мають ту ж саму висоту"
#: gtk/gtktreeview.c:1120
#: gtk/gtktreeview.c:1118
msgid "Hover Selection"
msgstr "Курсорне виділення"
#: gtk/gtktreeview.c:1121
#: gtk/gtktreeview.c:1119
msgid "Whether the selection should follow the pointer"
msgstr "Чи повинно виділення слідувати за вказівником"
#: gtk/gtktreeview.c:1137
#: gtk/gtktreeview.c:1135
msgid "Hover Expand"
msgstr "Курсорне розширення"
#: gtk/gtktreeview.c:1138
#: gtk/gtktreeview.c:1136
msgid ""
"Whether rows should be expanded/collapsed when the pointer moves over them"
msgstr ""
"Чи повинні рядки розгортатись/згортатись при переміщенні над ними вказівника"
#: gtk/gtktreeview.c:1149
#: gtk/gtktreeview.c:1147
msgid "Show Expanders"
msgstr "Показувати розширювачі"
#: gtk/gtktreeview.c:1150
#: gtk/gtktreeview.c:1148
msgid "View has expanders"
msgstr "Віджет містить розширювачі"
#: gtk/gtktreeview.c:1161
#: gtk/gtktreeview.c:1159
msgid "Level Indentation"
msgstr "Вирівнювання позначок"
#: gtk/gtktreeview.c:1162
#: gtk/gtktreeview.c:1160
msgid "Extra indentation for each level"
msgstr "Додаткове вирівнювання для кожного рівня"
#: gtk/gtktreeview.c:1169
#: gtk/gtktreeview.c:1167
msgid "Rubber Banding"
msgstr "Гумова стрічка"
#: gtk/gtktreeview.c:1170
#: gtk/gtktreeview.c:1168
msgid ""
"Whether to enable selection of multiple items by dragging the mouse pointer"
msgstr ""
"Чи дозволяти виділення кількох елементів перетягуванням вказівника миші"
#: gtk/gtktreeview.c:1176
#: gtk/gtktreeview.c:1174
msgid "Enable Grid Lines"
msgstr "Увімкнути лінії сітки"
#: gtk/gtktreeview.c:1177
#: gtk/gtktreeview.c:1175
msgid "Whether grid lines should be drawn in the tree view"
msgstr "Чи слід показувати лінії ґраток у віджеті"
#: gtk/gtktreeview.c:1184
#: gtk/gtktreeview.c:1182
msgid "Enable Tree Lines"
msgstr "Увімкнути лінії рівня вкладення"
#: gtk/gtktreeview.c:1185
#: gtk/gtktreeview.c:1183
msgid "Whether tree lines should be drawn in the tree view"
msgstr "Чи слід показувати лінії рівня вкладення у віджеті"
#: gtk/gtktreeview.c:1192
#: gtk/gtktreeview.c:1190
msgid "The column in the model containing the tooltip texts for the rows"
msgstr ""
"Стовпчик у моделі джерела даних, що містить текстові підказки для рядків"
@@ -7466,6 +7464,15 @@ msgstr "Назва профілю кольору"
msgid "The title of the color profile to use"
msgstr "Заголовок вікна вибору профілю кольору"
#~ msgid "has filter"
#~ msgstr "має фільтр"
#~ msgid "has sort"
#~ msgstr "має упорядкування"
#~ msgid "If a sort function is set for this model"
#~ msgstr "Чи встановлено функцію упорядкування для цієї моделі"
#~ msgid "Application menu"
#~ msgstr "Меню програм"

672
po/uk.po

File diff suppressed because it is too large Load Diff

View File

@@ -425,7 +425,7 @@ test_autoselect (void)
assert_model (selection, "1");
assert_changes (selection, "+0");
assert_selection (selection, "1");
assert_selection_changes (selection, "");
assert_selection_changes (selection, "0:1");
splice (store, 0, 1, (guint[]) { 7, 8, 9 }, 3);
assert_model (selection, "7 8 9");
@@ -642,6 +642,49 @@ test_query_range (void)
g_object_unref (selection);
}
static void
selection_changed_cb (GtkSelectionModel *model,
guint position,
guint n_items,
gpointer data)
{
int *counter = data;
(*counter)++;
}
/* Test that the selection emits selection-changed when an item
* is autoselected due to the underlying store going from empty
* to non-empty.
*/
static void
test_empty (void)
{
GListStore *store;
GtkSingleSelection *selection;
int counter;
GtkFilter *filter;
store = g_list_store_new (GTK_TYPE_FILTER);
counter = 0;
selection = gtk_single_selection_new (G_LIST_MODEL (store));
g_signal_connect (selection, "selection-changed", G_CALLBACK (selection_changed_cb), &counter);
g_assert_cmpint (gtk_single_selection_get_selected (GTK_SINGLE_SELECTION (selection)), ==, GTK_INVALID_LIST_POSITION);
filter = gtk_string_filter_new ();
g_list_store_append (store, filter);
g_object_unref (filter);
g_assert_cmpint (gtk_single_selection_get_selected (GTK_SINGLE_SELECTION (selection)), ==, 0);
g_assert_cmpint (counter, ==, 1);
g_object_unref (selection);
g_object_unref (store);
}
int
main (int argc, char *argv[])
{
@@ -660,6 +703,7 @@ main (int argc, char *argv[])
g_test_add_func ("/singleselection/persistence", test_persistence);
g_test_add_func ("/singleselection/query-range", test_query_range);
g_test_add_func ("/singleselection/changes", test_changes);
g_test_add_func ("/singleselection/empty", test_empty);
return g_test_run ();
}