Compare commits
14 Commits
columnview
...
selection-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
088f7331f9 | ||
|
|
93353888ca | ||
|
|
2a9d2cc7e9 | ||
|
|
0d9873d8bc | ||
|
|
23bc38ed06 | ||
|
|
42d26b4b05 | ||
|
|
04700789e1 | ||
|
|
e23baa59f0 | ||
|
|
e8e28b61db | ||
|
|
b766707f28 | ||
|
|
0787f262a0 | ||
|
|
d833f4a632 | ||
|
|
ce1e364ab8 | ||
|
|
adb5b299c9 |
@@ -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 _ */
|
||||
|
||||
|
||||
@@ -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]);
|
||||
|
||||
@@ -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);
|
||||
|
||||
61
gtk/inspector/action-holder.c
Normal file
61
gtk/inspector/action-holder.c
Normal 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;
|
||||
}
|
||||
17
gtk/inspector/action-holder.h
Normal file
17
gtk/inspector/action-holder.h
Normal 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__ */
|
||||
@@ -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:
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -38,4 +38,7 @@ inspector_sources = files(
|
||||
'updatesoverlay.c',
|
||||
'visual.c',
|
||||
'window.c',
|
||||
'prop-holder.c',
|
||||
'resource-holder.c',
|
||||
'action-holder.c'
|
||||
)
|
||||
|
||||
@@ -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
145
gtk/inspector/prop-holder.c
Normal 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;
|
||||
}
|
||||
17
gtk/inspector/prop-holder.h
Normal file
17
gtk/inspector/prop-holder.h
Normal 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__ */
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
106
gtk/inspector/resource-holder.c
Normal file
106
gtk/inspector/resource-holder.c
Normal 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;
|
||||
}
|
||||
24
gtk/inspector/resource-holder.h
Normal file
24
gtk/inspector/resource-holder.h
Normal 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
@@ -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>
|
||||
|
||||
@@ -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 expander’s 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 label’s 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 "Меню програм"
|
||||
|
||||
|
||||
@@ -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 ();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user