Compare commits

..

1 Commits

Author SHA1 Message Date
Matthias Clasen a9c7f94e04 Change list widget to use a GtkSelectionModel
Change the type of the model property in GtkListView,
GtkColumnView and GtkGridView to be GtkSelectionModel.

The convenience of automatic interposition of a selection
model is minor, compared to the confusion.

Update all callers.
2020-07-17 07:35:09 -04:00
86 changed files with 2999 additions and 4017 deletions
+12 -78
View File
@@ -597,83 +597,6 @@ css_button_new (const char *class)
return button;
}
typedef struct
{
GtkWidget parent_instance;
GdkRGBA color;
} ColorSwatch;
typedef struct
{
GtkWidgetClass parent_class;
} ColorSwatchClass;
G_DEFINE_TYPE (ColorSwatch, color_swatch, GTK_TYPE_WIDGET)
static GdkContentProvider *
color_swatch_drag_prepare (GtkDragSource *source,
double x,
double y,
ColorSwatch *swatch)
{
return gdk_content_provider_new_typed (GDK_TYPE_RGBA, &swatch->color);
}
static void
color_swatch_init (ColorSwatch *swatch)
{
GtkDragSource *source = gtk_drag_source_new ();
g_signal_connect (source, "prepare", G_CALLBACK (color_swatch_drag_prepare), swatch);
gtk_widget_add_controller (GTK_WIDGET (swatch), GTK_EVENT_CONTROLLER (source));
}
static void
color_swatch_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot)
{
ColorSwatch *swatch = (ColorSwatch *)widget;
float w = gtk_widget_get_width (widget);
float h = gtk_widget_get_height (widget);
gtk_snapshot_append_color (snapshot, &swatch->color,
&GRAPHENE_RECT_INIT(0, 0, w, h));
}
void
color_swatch_measure (GtkWidget *widget,
GtkOrientation orientation,
int for_size,
int *minimum_size,
int *natural_size,
int *minimum_baseline,
int *natural_baseline)
{
if (orientation == GTK_ORIENTATION_HORIZONTAL)
*minimum_size = *natural_size = 48;
else
*minimum_size = *natural_size = 32;
}
static void
color_swatch_class_init (ColorSwatchClass *class)
{
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
widget_class->snapshot = color_swatch_snapshot;
widget_class->measure = color_swatch_measure;
gtk_widget_class_set_css_name (widget_class, "colorswatch");
}
static GtkWidget *
color_swatch_new (const char *color)
{
ColorSwatch *swatch = g_object_new (color_swatch_get_type (), NULL);
gdk_rgba_parse (&swatch->color, color);
return GTK_WIDGET (swatch);
}
static GtkWidget *window = NULL;
GtkWidget *
@@ -747,7 +670,18 @@ do_dnd (GtkWidget *do_widget)
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), box3);
for (i = 0; colors[i]; i++)
gtk_box_append (GTK_BOX (box3), color_swatch_new (colors[i]));
{
GdkRGBA rgba;
GtkWidget *swatch;
gdk_rgba_parse (&rgba, colors[i]);
swatch = g_object_new (g_type_from_name ("GtkColorSwatch"),
"rgba", &rgba,
"selectable", FALSE,
NULL);
gtk_box_append (GTK_BOX (box3), swatch);
}
gtk_box_append (GTK_BOX (box3), css_button_new ("rainbow1"));
gtk_box_append (GTK_BOX (box3), css_button_new ("rainbow2"));
+4 -1
View File
@@ -144,6 +144,7 @@ do_listview_applauncher (GtkWidget *do_widget)
{
GtkWidget *list, *sw;
GListModel *model;
GtkSelectionModel *selection;
GtkListItemFactory *factory;
/* Create a window and set a few defaults */
@@ -181,8 +182,10 @@ do_listview_applauncher (GtkWidget *do_widget)
* to create as many listitems as it needs to show itself to the user.
*/
model = create_application_list ();
gtk_list_view_set_model (GTK_LIST_VIEW (list), model);
selection = GTK_SELECTION_MODEL (gtk_single_selection_new (model));
gtk_list_view_set_model (GTK_LIST_VIEW (list), selection);
g_object_unref (model);
g_object_unref (selection);
/* List widgets should always be contained in a #GtkScrolledWindow,
* because otherwise they might get too large or they might not
+1 -1
View File
@@ -491,7 +491,7 @@ do_listview_clocks (GtkWidget *do_widget)
model = create_clocks_model ();
selection = gtk_no_selection_new (model);
gtk_grid_view_set_model (GTK_GRID_VIEW (gridview), G_LIST_MODEL (selection));
gtk_grid_view_set_model (GTK_GRID_VIEW (gridview), GTK_SELECTION_MODEL (selection));
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), gridview);
g_object_unref (selection);
g_object_unref (model);
+7 -6
View File
@@ -662,7 +662,8 @@ create_color_grid (void)
{
GtkWidget *gridview;
GtkListItemFactory *factory;
GListModel *model, *selection;
GListModel *model;
GtkSelectionModel *selection;
gridview = gtk_grid_view_new ();
gtk_scrollable_set_hscroll_policy (GTK_SCROLLABLE (gridview), GTK_SCROLL_NATURAL);
@@ -678,7 +679,7 @@ create_color_grid (void)
model = G_LIST_MODEL (gtk_sort_list_model_new (gtk_color_list_new (0), NULL));
selection = G_LIST_MODEL (gtk_multi_selection_new (model));
selection = GTK_SELECTION_MODEL (gtk_multi_selection_new (model));
gtk_grid_view_set_model (GTK_GRID_VIEW (gridview), selection);
g_object_unref (selection);
g_object_unref (model);
@@ -857,7 +858,7 @@ do_listview_colors (GtkWidget *do_widget)
guint len;
GtkWidget *selection_view;
GListModel *selection_filter;
GListModel *no_selection;
GtkSelectionModel *selection;
GtkWidget *grid;
GtkWidget *selection_size_label;
GtkWidget *selection_average_picture;
@@ -945,10 +946,10 @@ do_listview_colors (GtkWidget *do_widget)
g_signal_connect (selection_filter, "items-changed", G_CALLBACK (update_selection_count), selection_size_label);
g_signal_connect (selection_filter, "items-changed", G_CALLBACK (update_selection_average), selection_average_picture);
no_selection = G_LIST_MODEL (gtk_no_selection_new (selection_filter));
gtk_grid_view_set_model (GTK_GRID_VIEW (selection_view), no_selection);
selection = GTK_SELECTION_MODEL (gtk_no_selection_new (selection_filter));
gtk_grid_view_set_model (GTK_GRID_VIEW (selection_view), selection);
g_object_unref (selection_filter);
g_object_unref (no_selection);
g_object_unref (selection);
model = gtk_multi_selection_get_model (GTK_MULTI_SELECTION (model));
g_object_ref (model);
+3 -3
View File
@@ -345,7 +345,7 @@ do_listview_settings (GtkWidget *do_widget)
GtkWidget *listview, *columnview;
GListModel *model;
GtkTreeListModel *treemodel;
GtkSingleSelection *selection;
GtkSelectionModel *selection;
GtkBuilderScope *scope;
GtkBuilder *builder;
GtkColumnViewColumn *name_column;
@@ -409,14 +409,14 @@ do_listview_settings (GtkWidget *do_widget)
create_settings_model,
NULL,
NULL);
selection = gtk_single_selection_new (G_LIST_MODEL (treemodel));
selection = GTK_SELECTION_MODEL (gtk_single_selection_new (G_LIST_MODEL (treemodel)));
g_object_bind_property_full (selection, "selected-item",
columnview, "model",
G_BINDING_SYNC_CREATE,
transform_settings_to_keys,
NULL,
columnview, NULL);
gtk_list_view_set_model (GTK_LIST_VIEW (listview), G_LIST_MODEL (selection));
gtk_list_view_set_model (GTK_LIST_VIEW (listview), selection);
g_object_unref (selection);
g_object_unref (treemodel);
g_object_unref (model);
+3 -2
View File
@@ -281,7 +281,8 @@ GtkWidget *
create_weather_view (void)
{
GtkWidget *listview;
GListModel *model, *selection;
GListModel *model;
GtkSelectionModel *selection;
GtkListItemFactory *factory;
factory = gtk_signal_list_item_factory_new ();
@@ -291,7 +292,7 @@ create_weather_view (void)
gtk_orientable_set_orientation (GTK_ORIENTABLE (listview), GTK_ORIENTATION_HORIZONTAL);
gtk_list_view_set_show_separators (GTK_LIST_VIEW (listview), TRUE);
model = create_weather_model ();
selection = G_LIST_MODEL (gtk_no_selection_new (model));
selection = GTK_SELECTION_MODEL (gtk_no_selection_new (model));
gtk_list_view_set_model (GTK_LIST_VIEW (listview), selection);
g_object_unref (selection);
g_object_unref (model);
+3 -3
View File
@@ -157,7 +157,7 @@ do_listview_words (GtkWidget *do_widget)
{
GtkWidget *header, *listview, *sw, *vbox, *search_entry, *open_button, *overlay;
GtkFilterListModel *filter_model;
GtkNoSelection *selection;
GtkSelectionModel *selection;
GtkStringList *stringlist;
GtkFilter *filter;
GFile *file;
@@ -218,8 +218,8 @@ do_listview_words (GtkWidget *do_widget)
gtk_builder_list_item_factory_new_from_bytes (NULL,
g_bytes_new_static (factory_text, strlen (factory_text))));
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), listview);
selection = gtk_no_selection_new (G_LIST_MODEL (filter_model));
gtk_list_view_set_model (GTK_LIST_VIEW (listview), G_LIST_MODEL (selection));
selection = GTK_SELECTION_MODEL (gtk_no_selection_new (G_LIST_MODEL (filter_model)));
gtk_list_view_set_model (GTK_LIST_VIEW (listview), selection);
g_object_unref (selection);
g_signal_connect (filter_model, "items-changed", G_CALLBACK (update_title_cb), progress);
+6 -6
View File
@@ -16,7 +16,7 @@ static GtkWidget *source_view;
static gchar *current_file = NULL;
static GtkWidget *notebook;
static GtkSingleSelection *selection;
static GtkSelectionModel *selection;
static GtkWidget *toplevel;
static char **search_needle;
@@ -220,7 +220,7 @@ activate_run (GSimpleAction *action,
GVariant *parameter,
gpointer window)
{
GtkTreeListRow *row = gtk_single_selection_get_selected_item (selection);
GtkTreeListRow *row = gtk_single_selection_get_selected_item (GTK_SINGLE_SELECTION (selection));
GtkDemo *demo = gtk_tree_list_row_get_item (row);
gtk_demo_run (demo, window);
@@ -932,7 +932,7 @@ activate_cb (GtkWidget *widget,
guint position,
gpointer window)
{
GtkTreeListRow *row = g_list_model_get_item (gtk_list_view_get_model (GTK_LIST_VIEW (widget)), position);
GtkTreeListRow *row = g_list_model_get_item (G_LIST_MODEL (gtk_list_view_get_model (GTK_LIST_VIEW (widget))), position);
GtkDemo *demo = gtk_tree_list_row_get_item (row);
gtk_demo_run (demo, window);
@@ -1152,11 +1152,11 @@ activate (GApplication *app)
search_entry = GTK_WIDGET (gtk_builder_get_object (builder, "search-entry"));
g_signal_connect (search_entry, "search-changed", G_CALLBACK (demo_search_changed_cb), filter);
selection = gtk_single_selection_new (G_LIST_MODEL (filter_model));
selection = GTK_SELECTION_MODEL (gtk_single_selection_new (G_LIST_MODEL (filter_model)));
g_signal_connect (selection, "notify::selected-item", G_CALLBACK (selection_cb), NULL);
gtk_list_view_set_model (GTK_LIST_VIEW (listview), G_LIST_MODEL (selection));
gtk_list_view_set_model (GTK_LIST_VIEW (listview), selection);
selection_cb (selection, NULL, NULL);
selection_cb (GTK_SINGLE_SELECTION (selection), NULL, NULL);
g_object_unref (builder);
}
+2 -4
View File
@@ -65,9 +65,9 @@
<section>
<xi:include href="xml/gtksorter.xml" />
<xi:include href="xml/gtkcustomsorter.xml" />
<xi:include href="xml/gtkmultisorter.xml" />
<xi:include href="xml/gtkstringsorter.xml" />
<xi:include href="xml/gtknumericsorter.xml" />
<xi:include href="xml/gtkmultisorter.xml" />
</section>
<xi:include href="xml/gtkselectionmodel.xml" />
<section>
@@ -93,9 +93,7 @@
<xi:include href="xml/gtklistview.xml" />
<xi:include href="xml/gtkgridview.xml" />
<xi:include href="xml/gtkcolumnview.xml" />
<section>
<xi:include href="xml/gtkcolumnviewcolumn.xml" />
</section>
<xi:include href="xml/gtkcolumnviewcolumn.xml" />
<xi:include href="xml/gtkdropdown.xml" />
</chapter>
-12
View File
@@ -3420,7 +3420,6 @@ gtk_tree_list_row_get_type
<SECTION>
<FILE>gtktreeexpander</FILE>
<TITLE>GtkTreeExpander</TITLE>
GtkTreeExpander
gtk_tree_expander_new
gtk_tree_expander_get_child
gtk_tree_expander_set_child
@@ -7552,17 +7551,6 @@ gtk_object_expression_get_object
gtk_closure_expression_new
gtk_cclosure_expression_new
<SUBSECTION>
GTK_VALUE_HOLDS_EXPRESSION
gtk_value_set_expression
gtk_value_take_expression
gtk_value_get_expression
gtk_value_dup_expression
<SUBSECTION>
GtkParamSpecExpression
gtk_param_spec_expression
<SUBSECTION Standard>
GTK_IS_EXPRESSION
GTK_TYPE_EXPRESSION
-7
View File
@@ -19,7 +19,6 @@ gtk_assistant_get_type
gtk_assistant_page_get_type
gtk_bin_layout_get_type
gtk_bitset_get_type
gtk_expression_get_type
gtk_bookmark_list_get_type
gtk_box_get_type
gtk_box_layout_get_type
@@ -30,7 +29,6 @@ gtk_builder_list_item_factory_get_type
gtk_builder_scope_get_type
gtk_button_get_type
gtk_calendar_get_type
gtk_cclosure_expression_get_type
gtk_cell_area_get_type
gtk_cell_area_box_get_type
gtk_cell_area_context_get_type
@@ -48,7 +46,6 @@ gtk_cell_renderer_toggle_get_type
gtk_cell_view_get_type
gtk_center_layout_get_type
gtk_check_button_get_type
gtk_closure_expression_get_type
gtk_color_button_get_type
gtk_color_chooser_get_type
gtk_color_chooser_dialog_get_type
@@ -57,7 +54,6 @@ gtk_column_view_get_type
gtk_column_view_column_get_type
gtk_combo_box_get_type
gtk_combo_box_text_get_type
gtk_constant_expression_get_type
gtk_constraint_get_type
gtk_constraint_guide_get_type
gtk_constraint_layout_get_type
@@ -154,7 +150,6 @@ gtk_no_selection_get_type
gtk_notebook_get_type
gtk_notebook_page_get_type
gtk_numeric_sorter_get_type
gtk_object_expression_get_type
gtk_orientable_get_type
gtk_overlay_get_type
gtk_overlay_layout_get_type
@@ -177,7 +172,6 @@ gtk_print_operation_preview_get_type
gtk_print_settings_get_type
@DISABLE_ON_W32@gtk_print_unix_dialog_get_type
gtk_progress_bar_get_type
gtk_property_expression_get_type
gtk_radio_button_get_type
gtk_range_get_type
gtk_recent_manager_get_type
@@ -235,7 +229,6 @@ gtk_text_view_get_type
gtk_toggle_button_get_type
gtk_tree_drag_dest_get_type
gtk_tree_drag_source_get_type
gtk_tree_expander_get_type
gtk_tree_list_model_get_type
gtk_tree_list_row_get_type
gtk_tree_list_row_sorter_get_type
+1 -1
View File
@@ -170,7 +170,7 @@ in GTK 3, you can prepare for the switch by using gtk_widget_destroy()
only on toplevel windows, and replace all other uses with
gtk_container_remove() or g_object_unref().
### Reduce the use of generic container APIs
### Reduce the use of generic container APIs</title>
GTK 4 removes gtk_container_add() and gtk_container_remove(). While there
is not always a replacement for gtk_container_remove() in GTK 3, you can
+1 -1
View File
@@ -183,7 +183,7 @@ transitioning code for easy lookup:
| #GtkTreeModel | #GListModel |
| #GtkTreePath | #guint position, #GtkTreeListRow |
| #GtkTreeIter | #guint position |
| #GtkTreeRowReference | #GObject item |
| GtkTreeRowReference | #GObject item |
| #GtkListStore | #GListStore |
| #GtkTreeStore | #GtkTreeListModel, #GtkTreeExpander |
| #GtkTreeSelection | #GtkSelectionModel |
+1 -1
View File
@@ -354,7 +354,7 @@ gdk_rgba_equal (gconstpointer p1,
*
* Returns a textual specification of @rgba in the form
* `rgb(r,g,b)` or
* `rgba(r,g,b,a)`,
* `rgba(r g,b,a)`,
* where “r”, “g”, “b” and “a” represent the red, green,
* blue and alpha values respectively. “r”, “g”, and “b” are
* represented as integers in the range 0 to 255, and “a”
+121 -181
View File
@@ -70,6 +70,7 @@ typedef enum
RESET_CLIP = 1 << 1,
RESET_OPACITY = 1 << 2,
DUMP_FRAMEBUFFER = 1 << 3,
CENTER_CHILD = 1 << 4,
NO_CACHE_PLZ = 1 << 5,
} OffscreenFlags;
@@ -905,7 +906,6 @@ upload_texture (GskGLRenderer *self,
}
else
{
out_region->texture_id =
gsk_gl_driver_get_texture_for_texture (self->gl_driver,
texture,
@@ -1152,59 +1152,6 @@ rounded_inner_rect_contains_rect (const GskRoundedRect *rounded,
return graphene_rect_contains_rect (&inner, rect);
}
/* Current clip is NOT rounded but new one is definitely! */
static inline bool
intersect_rounded_rectilinear (const graphene_rect_t *non_rounded,
const GskRoundedRect *rounded,
GskRoundedRect *result)
{
int n_corners = 0;
bool corners[4];
/* Intersects with top left corner? */
n_corners += corners[0] = rounded_rect_has_corner (rounded, 0) &&
graphene_rect_intersection (non_rounded,
&rounded_rect_corner (rounded, 0), NULL);
/* top right? */
n_corners += corners[1] = rounded_rect_has_corner (rounded, 1) &&
graphene_rect_intersection (non_rounded,
&rounded_rect_corner (rounded, 1), NULL);
/* bottom right? */
n_corners += corners[2] = rounded_rect_has_corner (rounded, 2) &&
graphene_rect_intersection (non_rounded,
&rounded_rect_corner (rounded, 2), NULL);
/* bottom left */
n_corners += corners[3] = rounded_rect_has_corner (rounded, 3) &&
graphene_rect_intersection (non_rounded,
&rounded_rect_corner (rounded, 3), NULL);
if (corners[0] && !graphene_rect_contains_rect (non_rounded, &rounded_rect_corner (rounded, 0)))
return false;
if (corners[1] && !graphene_rect_contains_rect (non_rounded, &rounded_rect_corner (rounded, 1)))
return false;
if (corners[2] && !graphene_rect_contains_rect (non_rounded, &rounded_rect_corner (rounded, 2)))
return false;
if (corners[3] && !graphene_rect_contains_rect (non_rounded, &rounded_rect_corner (rounded, 3)))
return false;
/* We do intersect with at least one of the corners, but in such a way that the
* intersection between the two clips can still be represented by a single rounded
* rect in a trivial way. do that. */
graphene_rect_intersection (non_rounded, &rounded->bounds, &result->bounds);
for (int i = 0; i < 4; i++)
{
if (corners[i])
result->corner[i] = rounded->corner[i];
else
result->corner[i].width = result->corner[i].height = 0;
}
return true;
}
/* This code intersects the current (maybe rounded) clip with the new
* non-rounded clip */
static inline void
render_clipped_child (GskGLRenderer *self,
RenderOpBuilder *builder,
@@ -1212,57 +1159,112 @@ render_clipped_child (GskGLRenderer *self,
GskRenderNode *child)
{
graphene_rect_t transformed_clip;
GskRoundedRect intersection;
GskRoundedRect child_clip;
ops_transform_bounds_modelview (builder, clip, &transformed_clip);
if (builder->clip_is_rectilinear)
{
memset (&intersection, 0, sizeof (GskRoundedRect));
graphene_rect_intersection (&transformed_clip,
&builder->current_clip->bounds,
&intersection.bounds);
goto trivial;
ops_push_clip (builder, &intersection);
{
const GskRoundedRect *cur_clip = builder->current_clip;
int n_corners = 0;
bool corners[4];
/* Intersects with top left corner? */
n_corners += corners[0] = rounded_rect_has_corner (cur_clip, 0) &&
graphene_rect_intersection (&transformed_clip,
&rounded_rect_corner (cur_clip, 0), NULL);
/* top right? */
n_corners += corners[1] = rounded_rect_has_corner (cur_clip, 1) &&
graphene_rect_intersection (&transformed_clip,
&rounded_rect_corner (cur_clip, 1), NULL);
/* bottom right? */
n_corners += corners[2] = rounded_rect_has_corner (cur_clip, 2) &&
graphene_rect_intersection (&transformed_clip,
&rounded_rect_corner (cur_clip, 2), NULL);
/* bottom left */
n_corners += corners[3] = rounded_rect_has_corner (cur_clip, 3) &&
graphene_rect_intersection (&transformed_clip,
&rounded_rect_corner (cur_clip, 3), NULL);
if (n_corners == 0)
goto trivial;
if (corners[0] && !graphene_rect_contains_rect (&transformed_clip, &rounded_rect_corner (cur_clip, 0)))
goto rtt;
if (corners[1] && !graphene_rect_contains_rect (&transformed_clip, &rounded_rect_corner (cur_clip, 1)))
goto rtt;
if (corners[2] && !graphene_rect_contains_rect (&transformed_clip, &rounded_rect_corner (cur_clip, 2)))
goto rtt;
if (corners[3] && !graphene_rect_contains_rect (&transformed_clip, &rounded_rect_corner (cur_clip, 3)))
goto rtt;
/* We do intersect with at least one of the corners, but in such a way that the
* intersection between the two clips can still be represented by a single rounded
* rect in a trivial way. do that. */
{
GskRoundedRect real_intersection;
graphene_rect_intersection (&transformed_clip, &cur_clip->bounds, &real_intersection.bounds);
for (int i = 0; i < 4; i++)
{
if (corners[i])
real_intersection.corner[i] = cur_clip->corner[i];
else
real_intersection.corner[i].width = real_intersection.corner[i].height = 0;
}
/* Draw with that new clip */
ops_push_clip (builder, &real_intersection);
gsk_gl_renderer_add_render_ops (self, child, builder);
ops_pop_clip (builder);
}
else if (intersect_rounded_rectilinear (&transformed_clip,
builder->current_clip,
&intersection))
{
ops_push_clip (builder, &intersection);
gsk_gl_renderer_add_render_ops (self, child, builder);
ops_pop_clip (builder);
}
else
{
/* well fuck */
const float scale = ops_get_scale (builder);
gboolean is_offscreen;
TextureRegion region;
GskRoundedRect scaled_clip;
return;
}
memset (&scaled_clip, 0, sizeof (GskRoundedRect));
rtt:
{
/* well fuck */
const float scale = ops_get_scale (builder);
gboolean is_offscreen;
TextureRegion region;
GskRoundedRect scaled_clip;
scaled_clip.bounds.origin.x = clip->origin.x * scale;
scaled_clip.bounds.origin.y = clip->origin.y * scale;
scaled_clip.bounds.size.width = clip->size.width * scale;
scaled_clip.bounds.size.height = clip->size.height * scale;
memset (&scaled_clip, 0, sizeof (GskRoundedRect));
ops_push_clip (builder, &scaled_clip);
if (!add_offscreen_ops (self, builder, &child->bounds,
child,
&region, &is_offscreen,
RESET_OPACITY | FORCE_OFFSCREEN))
g_assert_not_reached ();
ops_pop_clip (builder);
scaled_clip.bounds.origin.x = clip->origin.x * scale;
scaled_clip.bounds.origin.y = clip->origin.y * scale;
scaled_clip.bounds.size.width = clip->size.width * scale;
scaled_clip.bounds.size.height = clip->size.height * scale;
ops_set_program (builder, &self->programs->blit_program);
ops_set_texture (builder, region.texture_id);
ops_push_clip (builder, &scaled_clip);
if (!add_offscreen_ops (self, builder, &child->bounds,
child,
&region, &is_offscreen,
RESET_OPACITY | FORCE_OFFSCREEN))
g_assert_not_reached ();
ops_pop_clip (builder);
load_offscreen_vertex_data (ops_draw (builder, NULL), child, builder);
}
ops_set_program (builder, &self->programs->blit_program);
ops_set_texture (builder, region.texture_id);
load_offscreen_vertex_data (ops_draw (builder, NULL), child, builder);
return;
}
trivial:
memset (&child_clip, 0, sizeof (GskRoundedRect));
graphene_rect_intersection (&transformed_clip,
&builder->current_clip->bounds,
&child_clip.bounds);
ops_push_clip (builder, &child_clip);
gsk_gl_renderer_add_render_ops (self, child, builder);
ops_pop_clip (builder);
return;
}
static inline void
@@ -1292,29 +1294,6 @@ render_rounded_clip_node (GskGLRenderer *self,
return;
ops_transform_bounds_modelview (builder, &clip->bounds, &transformed_clip.bounds);
for (i = 0; i < 4; i ++)
{
transformed_clip.corner[i].width = clip->corner[i].width * scale;
transformed_clip.corner[i].height = clip->corner[i].height * scale;
}
if (builder->clip_is_rectilinear)
{
GskRoundedRect intersected_clip;
if (intersect_rounded_rectilinear (&builder->current_clip->bounds,
&transformed_clip,
&intersected_clip))
{
ops_push_clip (builder, &intersected_clip);
gsk_gl_renderer_add_render_ops (self, child, builder);
ops_pop_clip (builder);
return;
}
}
/* After this point we are really working with a new and a current clip
* which both have rounded corners. */
if (!ops_has_clip (builder))
need_offscreen = FALSE;
@@ -1328,16 +1307,12 @@ render_rounded_clip_node (GskGLRenderer *self,
{
/* If they don't intersect at all, we can simply set
* the new clip and add the render ops */
/* If the new clip entirely contains the current clip, the intersection is simply
* the current clip, so we can ignore the new one */
if (rounded_inner_rect_contains_rect (&transformed_clip, &builder->current_clip->bounds))
for (i = 0; i < 4; i ++)
{
gsk_gl_renderer_add_render_ops (self, child, builder);
return;
transformed_clip.corner[i].width = clip->corner[i].width * scale;
transformed_clip.corner[i].height = clip->corner[i].height * scale;
}
/* TODO: Intersect current and new clip */
ops_push_clip (builder, &transformed_clip);
gsk_gl_renderer_add_render_ops (self, child, builder);
ops_pop_clip (builder);
@@ -1379,6 +1354,7 @@ render_rounded_clip_node (GskGLRenderer *self,
load_offscreen_vertex_data (ops_draw (builder, NULL), node, builder);
}
/* Else this node is entirely out of the current clip node and we don't draw it anyway. */
}
static inline void
@@ -1786,6 +1762,7 @@ render_unblurred_outset_shadow_node (GskGLRenderer *self,
}
static GdkRGBA COLOR_WHITE = { 1, 1, 1, 1 };
static inline void
render_outset_shadow_node (GskGLRenderer *self,
@@ -1806,32 +1783,19 @@ render_outset_shadow_node (GskGLRenderer *self,
OpShadow *shadow;
int blurred_texture_id;
int cached_tid;
bool do_slicing;
/* scaled_outline is the minimal outline we need to draw the given drop shadow,
* enlarged by the spread and offset by the blur radius. */
scaled_outline = *outline;
if (outline->bounds.size.width < blur_extra ||
outline->bounds.size.height < blur_extra)
{
do_slicing = false;
gsk_rounded_rect_shrink (&scaled_outline, -spread, -spread, -spread, -spread);
}
else
{
/* Shrink our outline to the minimum size that can still hold all the border radii */
gsk_rounded_rect_shrink_to_minimum (&scaled_outline);
/* Increase by the spread */
gsk_rounded_rect_shrink (&scaled_outline, -spread, -spread, -spread, -spread);
/* Grow bounds but don't grow corners */
graphene_rect_inset (&scaled_outline.bounds, - blur_extra / 2.0, - blur_extra / 2.0);
/* For the center part, we add a few pixels */
scaled_outline.bounds.size.width += SHADOW_EXTRA_SIZE;
scaled_outline.bounds.size.height += SHADOW_EXTRA_SIZE;
do_slicing = true;
}
/* Shrink our outline to the minimum size that can still hold all the border radii */
gsk_rounded_rect_shrink_to_minimum (&scaled_outline);
/* Increase by the spread */
gsk_rounded_rect_shrink (&scaled_outline, -spread, -spread, -spread, -spread);
/* Grow bounds but don't grow corners */
graphene_rect_inset (&scaled_outline.bounds, - extra_blur_pixels, - extra_blur_pixels);
/* For the center part, we add a few pixels */
scaled_outline.bounds.size.width += SHADOW_EXTRA_SIZE;
scaled_outline.bounds.size.height += SHADOW_EXTRA_SIZE;
texture_width = (int)ceil ((scaled_outline.bounds.size.width + blur_extra) * scale);
texture_height = (int)ceil ((scaled_outline.bounds.size.height + blur_extra) * scale);
@@ -1916,41 +1880,6 @@ render_outset_shadow_node (GskGLRenderer *self,
blurred_texture_id = cached_tid;
}
if (!do_slicing)
{
const float min_x = floorf (builder->dx + outline->bounds.origin.x - spread - (blur_extra / 2.0) + dx);
const float min_y = floorf (builder->dy + outline->bounds.origin.y - spread - (blur_extra / 2.0) + dy);
float x1, x2, y1, y2, tx1, tx2, ty1, ty2;
ops_set_program (builder, &self->programs->outset_shadow_program);
ops_set_color (builder, color);
ops_set_texture (builder, blurred_texture_id);
shadow = ops_begin (builder, OP_CHANGE_OUTSET_SHADOW);
shadow->outline = transform_rect (self, builder, outline);
tx1 = 0; tx2 = 1;
ty1 = 0; ty2 = 1;
x1 = min_x;
x2 = min_x + texture_width / scale;
y1 = min_y;
y2 = min_y + texture_height / scale;
ops_draw (builder, (GskQuadVertex[GL_N_VERTICES]) {
{ { x1, y1 }, { tx1, ty2 }, },
{ { x1, y2 }, { tx1, ty1 }, },
{ { x2, y1 }, { tx2, ty2 }, },
{ { x2, y2 }, { tx2, ty1 }, },
{ { x1, y2 }, { tx1, ty1 }, },
{ { x2, y1 }, { tx2, ty2 }, },
});
return;
}
ops_set_program (builder, &self->programs->outset_shadow_program);
ops_set_color (builder, color);
ops_set_texture (builder, blurred_texture_id);
@@ -3388,8 +3317,19 @@ add_offscreen_ops (GskGLRenderer *self,
bounds->origin.y * scale,
width, height));
builder->dx = 0;
builder->dy = 0;
if (flags & CENTER_CHILD)
{
ops_offset (builder,
(bounds->size.width - child_node->bounds.size.width) / 2.0 -
child_node->bounds.origin.x,
(bounds->size.height - child_node->bounds.size.height) / 2.0 -
child_node->bounds.origin.y);
}
else
{
builder->dx = 0;
builder->dy = 0;
}
if (flags & RESET_OPACITY)
prev_opacity = ops_set_opacity (builder, 1.0);
+4 -3
View File
@@ -27,19 +27,20 @@
* SECTION:gtkbitset
* @title: GtkBitset
* @short_description: Sets of integers
* @see_also: #GtkSelectionModel
* @see_also: GtkSelectionModel
*
* #GtkBitset is a data structure for representing a set of unsigned integers.
* Another name for this data structure is "bitmap".
*
* The current implemenation is based on [roaring bitmaps](https://roaringbitmap.org/).
* This version is based on [roaring bitmaps](https://roaringbitmap.org/).
*
* A bitset allows adding a set of integers and provides support for set operations
* like unions, intersections and checks for equality or if a value is contained
* in the set. #GtkBitset also contains various functions to query metadata about
* the bitset, such as the minimum or maximum values or its size.
*
* The fastest way to iterate values in a bitset is #GtkBitsetIter.
* The fastest way to iterate values in a bitset is #GtkBitsetIter which allows
* quick iteration of all the values in a bitset.
*
* The main use case for #GtkBitset is implementing complex selections for
* #GtkSelectionModel.
+1 -15
View File
@@ -130,21 +130,7 @@ void gtk_bitset_splice (GtkBitset
guint removed,
guint added);
/**
* GtkBitsetIter:
*
* An opaque, stack-allocated struct for iterating
* over the elements of a #GtkBitset. Before a GtkBitsetIter
* can be used, it needs to be initialized with
* gtk_bitset_iter_init_first(), gtk_bitset_iter_init_last()
* or gtk_bitset_iter_init_at().
*/
typedef struct _GtkBitsetIter GtkBitsetIter;
struct _GtkBitsetIter
{
gpointer private_data[10];
};
typedef struct {gpointer private_data[10]; } GtkBitsetIter;
GDK_AVAILABLE_IN_ALL
gboolean gtk_bitset_iter_init_first (GtkBitsetIter *iter,
+14 -6
View File
@@ -28,6 +28,7 @@
#include "gtkstylecontextprivate.h"
#include "gtktypebuiltins.h"
#include "gtkwidgetprivate.h"
#include "gtknative.h"
/**
* SECTION:gtkboxlayout
@@ -249,8 +250,10 @@ gtk_box_layout_compute_size (GtkBoxLayout *self,
required_nat += (n_visible_children - 1) * spacing;
}
*minimum = required_min;
*natural = required_nat;
if (minimum != NULL)
*minimum = required_min;
if (natural != NULL)
*natural = required_nat;
}
static void
@@ -417,10 +420,15 @@ gtk_box_layout_compute_opposite_size (GtkBoxLayout *self,
}
}
*minimum = computed_minimum;
*natural = MAX (computed_natural, computed_natural_below + computed_natural_above);
*min_baseline = computed_minimum_baseline;
*nat_baseline = computed_natural_baseline;
if (minimum != NULL)
*minimum = computed_minimum;
if (natural != NULL)
*natural = MAX (computed_natural, computed_natural_below + computed_natural_above);
if (min_baseline != NULL)
*min_baseline = computed_minimum_baseline;
if (nat_baseline != NULL)
*nat_baseline = computed_natural_baseline;
}
static void
-11
View File
@@ -294,17 +294,6 @@ gtk_button_class_init (GtkButtonClass *klass)
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_BUTTON_ACCESSIBLE);
gtk_widget_class_set_css_name (widget_class, I_("button"));
gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_space, 0,
"activate", NULL);
gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_KP_Space, 0,
"activate", NULL);
gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_Return, 0,
"activate", NULL);
gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_ISO_Enter, 0,
"activate", NULL);
gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_KP_Enter, 0,
"activate", NULL);
}
static void
+16 -28
View File
@@ -60,7 +60,7 @@
* GtkColumnView allows the user to select items according to the selection
* characteristics of the model. If the provided model is not a #GtkSelectionModel,
* GtkColumnView will wrap it in a #GtkSingleSelection. For models that allow
* multiple selected items, it is possible to turn on *rubberband selection*,
* multiple selected items, it is possible to turn on _rubberband selection_,
* using #GtkColumnView:enable-rubberband.
*
* The column view supports sorting that can be customized by the user by
@@ -628,7 +628,7 @@ gtk_column_view_class_init (GtkColumnViewClass *klass)
g_param_spec_object ("model",
P_("Model"),
P_("Model for the items displayed"),
G_TYPE_LIST_MODEL,
GTK_TYPE_SELECTION_MODEL,
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
/**
@@ -1202,7 +1202,7 @@ gtk_column_view_new (void)
*
* Returns: (nullable) (transfer none): The model in use
**/
GListModel *
GtkSelectionModel *
gtk_column_view_get_model (GtkColumnView *self)
{
g_return_val_if_fail (GTK_IS_COLUMN_VIEW (self), NULL);
@@ -1215,17 +1215,14 @@ gtk_column_view_get_model (GtkColumnView *self)
* @self: a #GtkColumnView
* @model: (allow-none) (transfer none): the model to use or %NULL for none
*
* Sets the #GListModel to use.
*
* If the @model is a #GtkSelectionModel, it is used for managing the selection.
* Otherwise, @self creates a #GtkSingleSelection for the selection.
* Sets the #GtkSelectionModel to use.
**/
void
gtk_column_view_set_model (GtkColumnView *self,
GListModel *model)
gtk_column_view_set_model (GtkColumnView *self,
GtkSelectionModel *model)
{
g_return_if_fail (GTK_IS_COLUMN_VIEW (self));
g_return_if_fail (model == NULL || G_IS_LIST_MODEL (model));
g_return_if_fail (model == NULL || GTK_IS_SELECTION_MODEL (model));
if (gtk_list_view_get_model (self->listview) == model)
return;
@@ -1241,7 +1238,7 @@ gtk_column_view_set_model (GtkColumnView *self,
*
* Gets the list of columns in this column view. This list is constant over
* the lifetime of @self and can be used to monitor changes to the columns
* of @self by connecting to the #GListModel:items-changed signal.
* of @self by connecting to the GListModel:items-changed signal.
*
* Returns: (transfer none): The list managing the columns
**/
@@ -1263,7 +1260,7 @@ gtk_column_view_get_columns (GtkColumnView *self)
*/
void
gtk_column_view_set_show_row_separators (GtkColumnView *self,
gboolean show_row_separators)
gboolean show_row_separators)
{
g_return_if_fail (GTK_IS_COLUMN_VIEW (self));
@@ -1302,7 +1299,7 @@ gtk_column_view_get_show_row_separators (GtkColumnView *self)
*/
void
gtk_column_view_set_show_column_separators (GtkColumnView *self,
gboolean show_column_separators)
gboolean show_column_separators)
{
g_return_if_fail (GTK_IS_COLUMN_VIEW (self));
@@ -1486,26 +1483,17 @@ gtk_column_view_get_list_view (GtkColumnView *self)
* gtk_column_view_get_sorter:
* @self: a #GtkColumnView
*
* Returns a special sorter that reflects the users sorting
* choices in the column view.
* Returns the sorter associated with users sorting choices in
* the column view.
*
* To allow users to customizable sorting by clicking on column
* headers, this sorter needs to be set on the sort model underneath
* the model that is displayed by the view.
* headers, this sorter needs to be set on the sort
* model(s) underneath the model that is displayed
* by the view.
*
* See gtk_column_view_column_set_sorter() for setting up
* See gtk_column_view_column_get_sorter() for setting up
* per-column sorting.
*
* Here is an example:
* |[
* gtk_column_view_column_set_sorter (column, sorter);
* gtk_column_view_append_column (view, column);
* model = gtk_sort_list_model_new (store,
* gtk_column_view_get_sorter (view));
* selection = gtk_no_selection_new (model);
* gtk_column_view_set_model (view, selection);
* ]|
*
* Returns: (transfer none): the #GtkSorter of @self
*/
GtkSorter *
+3 -2
View File
@@ -26,6 +26,7 @@
#include <gtk/gtktypes.h>
#include <gtk/gtksortlistmodel.h>
#include <gtk/gtkselectionmodel.h>
#include <gtk/gtksorter.h>
G_BEGIN_DECLS
@@ -67,10 +68,10 @@ void gtk_column_view_insert_column (GtkColumnView
GtkColumnViewColumn *column);
GDK_AVAILABLE_IN_ALL
GListModel * gtk_column_view_get_model (GtkColumnView *self);
GtkSelectionModel * gtk_column_view_get_model (GtkColumnView *self);
GDK_AVAILABLE_IN_ALL
void gtk_column_view_set_model (GtkColumnView *self,
GListModel *model);
GtkSelectionModel *model);
GDK_AVAILABLE_IN_ALL
gboolean gtk_column_view_get_show_row_separators (GtkColumnView *self);
+5 -9
View File
@@ -29,8 +29,8 @@
* @Title: GtkCustomFilter
* @Short_description: Filtering with callbacks
*
* #GtkCustomFilter is a #GtkFilter that uses a callback to determine
* whether to include an item or not.
* #GtkCustomFilter is a #GtkFilter that uses a callback to determine whether
* to include an item or not.
*/
struct _GtkCustomFilter
{
@@ -98,13 +98,11 @@ gtk_custom_filter_init (GtkCustomFilter *self)
* gtk_custom_filter_new:
* @match_func: (nullable): function to filter items
* @user_data: (nullable): user data to pass to @match_func
* @user_destroy: destroy notify for @user_data
* @user_destroy: destory notify
*
* Creates a new filter using the given @match_func to filter
* items.
*
* If @match_func is %NULL, the filter matches all items.
*
* If the filter func changes its filtering behavior,
* gtk_filter_changed() needs to be called.
*
@@ -129,12 +127,10 @@ gtk_custom_filter_new (GtkCustomFilterFunc match_func,
* @self: a #GtkCustomFilter
* @match_func: (nullable): function to filter items
* @user_data: (nullable): user data to pass to @match_func
* @user_destroy: destroy notify for @user_data
* @user_destroy: destory notify
*
* Sets (or unsets) the function used for filtering items.
*
* If @match_func is %NULL, the filter matches all items.
*
*
* If the filter func changes its filtering behavior,
* gtk_filter_changed() needs to be called.
*
+8 -8
View File
@@ -513,7 +513,7 @@ update_combo_sensitivity_from_printers (GtkCustomPaperUnixDialog *dialog)
static void
update_custom_widgets_from_list (GtkCustomPaperUnixDialog *dialog)
{
GListModel *model;
GtkSelectionModel *model;
GtkPageSetup *page_setup;
model = gtk_list_view_get_model (GTK_LIST_VIEW (dialog->listview));
@@ -559,7 +559,7 @@ static void
unit_widget_changed (GtkCustomPaperUnixDialog *dialog)
{
double w, h, top, bottom, left, right;
GListModel *model;
GtkSelectionModel *model;
GtkPageSetup *page_setup;
GtkPaperSize *paper_size;
@@ -648,7 +648,7 @@ add_custom_paper (GtkCustomPaperUnixDialog *dialog)
static void
remove_custom_paper (GtkCustomPaperUnixDialog *dialog)
{
GListModel *model;
GtkSelectionModel *model;
guint selected;
model = gtk_list_view_get_model (GTK_LIST_VIEW (dialog->listview));
@@ -870,7 +870,7 @@ populate_dialog (GtkCustomPaperUnixDialog *dialog)
GtkWidget *grid, *label, *widget, *frame, *combo;
GtkWidget *hbox, *vbox, *listview, *scrolled, *toolbar, *button;
GtkUnit user_units;
GListModel *model;
GtkSingleSelection *selection;
GtkListItemFactory *factory;
content_area = gtk_dialog_get_content_area (cpu_dialog);
@@ -899,10 +899,10 @@ populate_dialog (GtkCustomPaperUnixDialog *dialog)
listview = gtk_list_view_new ();
gtk_widget_set_size_request (listview, 140, -1);
model = G_LIST_MODEL (gtk_single_selection_new (G_LIST_MODEL (dialog->custom_paper_list)));
gtk_list_view_set_model (GTK_LIST_VIEW (listview), model);
g_signal_connect (model, "notify::selected", G_CALLBACK (selected_custom_paper_changed), dialog);
g_object_unref (model);
selection = gtk_single_selection_new (G_LIST_MODEL (dialog->custom_paper_list));
gtk_list_view_set_model (GTK_LIST_VIEW (listview), GTK_SELECTION_MODEL (selection));
g_signal_connect (selection, "notify::selected", G_CALLBACK (selected_custom_paper_changed), dialog);
g_object_unref (selection);
factory = gtk_signal_list_item_factory_new ();
g_signal_connect (factory, "setup", G_CALLBACK (setup_item), NULL);
+5 -9
View File
@@ -27,7 +27,7 @@
/**
* SECTION:gtkcustomsorter
* @Title: GtkCustomSorter
* @Short_description: Sorting with a callbacks
* @Short_description: Sorting with a callback
*
* GtkCustomSorter is a #GtkSorter implementation that sorts
* via a traditional #GCompareDataFunc callback.
@@ -108,10 +108,8 @@ gtk_custom_sorter_init (GtkCustomSorter *self)
* Creates a new #GtkSorter that works by calling
* @sort_func to compare items.
*
* If @sort_func is %NULL, all items are considered equal.
*
* Returns: a new #GtkSorter
*/
* Returns: a new #GTkSorter
*/
GtkSorter *
gtk_custom_sorter_new (GCompareDataFunc sort_func,
gpointer user_data,
@@ -131,12 +129,10 @@ gtk_custom_sorter_new (GCompareDataFunc sort_func,
* @self: a #GtkCustomSorter
* @sort_func: (nullable): function to sort items
* @user_data: (nullable): user data to pass to @match_func
* @user_destroy: destroy notify for @user_data
* @user_destroy: destory notify
*
* Sets (or unsets) the function used for sorting items.
*
* If @sort_func is %NULL, all items are considered equal.
*
*
* If the sort func changes its sorting behavior,
* gtk_sorter_changed() needs to be called.
*
+5 -4
View File
@@ -48,10 +48,11 @@ typedef enum {
GTK_DEBUG_INTERACTIVE = 1 << 10,
GTK_DEBUG_TOUCHSCREEN = 1 << 11,
GTK_DEBUG_ACTIONS = 1 << 12,
GTK_DEBUG_LAYOUT = 1 << 13,
GTK_DEBUG_SNAPSHOT = 1 << 14,
GTK_DEBUG_CONSTRAINTS = 1 << 15,
GTK_DEBUG_BUILDER_OBJECTS = 1 << 16,
GTK_DEBUG_RESIZE = 1 << 13,
GTK_DEBUG_LAYOUT = 1 << 14,
GTK_DEBUG_SNAPSHOT = 1 << 15,
GTK_DEBUG_CONSTRAINTS = 1 << 16,
GTK_DEBUG_BUILDER_OBJECTS = 1 << 17,
} GtkDebugFlag;
#ifdef G_ENABLE_DEBUG
+2 -2
View File
@@ -70,7 +70,7 @@
* useful if the list of options is long. To enable the search entry,
* use gtk_drop_down_set_enable_search().
*
* # CSS nodes
* * # CSS nodes
*
* GtkDropDown has a single CSS node with name dropdown,
* with the button and popover nodes as children.
@@ -673,7 +673,7 @@ gtk_drop_down_set_model (GtkDropDown *self,
selection = G_LIST_MODEL (gtk_single_selection_new (filter_model));
g_set_object (&self->popup_selection, selection);
gtk_list_view_set_model (GTK_LIST_VIEW (self->popup_list), selection);
gtk_list_view_set_model (GTK_LIST_VIEW (self->popup_list), GTK_SELECTION_MODEL (selection));
g_object_unref (selection);
selection = G_LIST_MODEL (gtk_single_selection_new (model));
-34
View File
@@ -30,7 +30,6 @@
#include "gtkshortcut.h"
#include "gtkshortcuttrigger.h"
#include "gtkwidgetprivate.h"
#include "gtkeventcontrollerfocus.h"
#include "gtkintl.h"
/**
@@ -49,22 +48,6 @@
* to click or press the Enter key. The default bindings
* for leaving the edit mode are the Enter key (to save
* the results) or the Escape key (to cancel the editing).
*
* # CSS nodes
*
* |[<!-- language="plain" -->
* editablelabel[.editing]
* stack
* label
* text
* ]|
*
* GtkEditableLabel has a main node with the name editablelabel.
* When the entry is in editing mode, it gets the .editing style
* class.
*
* For all the subnodes added to the text node in various situations,
* see #GtkText.
*/
struct _GtkEditableLabel
@@ -194,20 +177,12 @@ gtk_editable_label_prepare_drag (GtkDragSource *source,
gtk_label_get_label (GTK_LABEL (self->label)));
}
static void
gtk_editable_label_focus_out (GtkEventController *controller,
GtkEditableLabel *self)
{
gtk_editable_label_stop_editing (self, TRUE);
}
static void
gtk_editable_label_init (GtkEditableLabel *self)
{
GtkGesture *gesture;
GtkDropTarget *target;
GtkDragSource *source;
GtkEventController *controller;
gtk_widget_set_focusable (GTK_WIDGET (self), TRUE);
@@ -237,10 +212,6 @@ gtk_editable_label_init (GtkEditableLabel *self)
g_signal_connect (source, "prepare", G_CALLBACK (gtk_editable_label_prepare_drag), self);
gtk_widget_add_controller (self->label, GTK_EVENT_CONTROLLER (source));
controller = gtk_event_controller_focus_new ();
g_signal_connect (controller, "leave", G_CALLBACK (gtk_editable_label_focus_out), self);
gtk_widget_add_controller (GTK_WIDGET (self), controller);
gtk_editable_init_delegate (GTK_EDITABLE (self));
}
@@ -473,8 +444,6 @@ gtk_editable_label_start_editing (GtkEditableLabel *self)
gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "entry");
gtk_widget_grab_focus (self->entry);
gtk_widget_add_css_class (GTK_WIDGET (self), "editing");
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_EDITING]);
}
@@ -511,8 +480,5 @@ gtk_editable_label_stop_editing (GtkEditableLabel *self,
}
gtk_widget_grab_focus (GTK_WIDGET (self));
gtk_widget_remove_css_class (GTK_WIDGET (self), "editing");
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_EDITING]);
}
+9 -9
View File
@@ -53,26 +53,26 @@
*
* Here is an example of a complex expression:
* |[
* color_expr = gtk_property_expression_new (GTK_TYPE_LIST_ITEM,
* NULL, "item");
* expression = gtk_property_expression_new (GTK_TYPE_COLOR,
* color_expr, "name");
* color_expr = gtk_property_expression_new (GTK_TYPE_LIST_ITEM,
* NULL, "item");
* expression = gtk_property_expression_new (GTK_TYPE_COLOR,
* color_expr,
* "name");
* ]|
*
* when evaluated with `this` being a GtkListItem, it will obtain the
* "item" property from the GtkListItem, and then obtain the "name" property
* from the resulting object (which is assumed to be of type GTK_TYPE_COLOR).
*
* A more concise way to describe this would be
* |[
* this->item->name
* this->item->name
* ]|
*
* The most likely place where you will encounter expressions is in the context
* of list models and list widgets using them. For example, #GtkDropDown is
* evaluating a GtkExpression to obtain strings from the items in its model
* that it can then use to match against the contents of its search entry.
* #GtkStringFilter is using a GtkExpression for similar reasons.
* #GtkStringFilter is using a GtkExpression for a similar reason.
*
* By default, expressions are not paying attention to changes and evaluation is
* just a snapshot of the current state at a given time. To get informed about
@@ -127,11 +127,11 @@
* attribute to specify the object type, and a `name` attribute to specify the property
* to look up. The content of <lookup> can either be an element specfiying the expression
* to use the object, or a string that specifies the name of the object to use.
*
*
* Example:
* |[
* <lookup name='search'>string_filter</lookup>
* ]|
* |]
*
* To create a constant expression, use the <constant> element. If the type attribute
* is specified, the element content is interpreted as a value of that type. Otherwise,
+12 -13
View File
@@ -30,21 +30,20 @@
* @Short_description: Filtering items
* @See_also: #GtkFilerListModel
*
* A #GtkFilter object describes the filtering to be performed by a
* #GtkFilterListModel.
*
* The model will use the filter to determine if it should include items
* or not by calling gtk_filter_match() for each item and only keeping the
* ones that the function returns %TRUE for.
* #GtkFilter is the way to describe filters to be used in #GtkFilterListModel.
*
* The model will use a filter to determine if it should filter items or not
* by calling gtk_filter_match() for each item and only keeping the ones
* visible that the function returns %TRUE for.
*
* Filters may change what items they match through their lifetime. In that
* case, they will emit the #GtkFilter:changed signal to notify that previous
* filter results are no longer valid and that items should be checked again
* via gtk_filter_match().
* case, they can call gtk_filter_changed() which will emit the #GtkFilter:changed
* signal to notify that previous filter results are no longer valid and that
* items should be checked via gtk_filter_match() again.
*
* GTK provides various pre-made filter implementations for common filtering
* GTK provides various premade filter implementations for common filtering
* operations. These filters often include properties that can be linked to
* various widgets to easily allow searches.
* various widgets to easily allow searches.
*
* However, in particular for large lists or complex search methods, it is
* also possible to subclass #GtkFilter and provide one's own filter.
@@ -119,7 +118,7 @@ gtk_filter_init (GtkFilter *self)
* @self: a #GtkFilter
* @item: (type GObject) (transfer none): The item to check
*
* Checks if the given @item is matched by the filter or not.
* Checks if the given @item is matched by the filter or not.
*
* Returns: %TRUE if the filter matches the item and a filter model should
* keep it, %FALSE if not.
@@ -141,7 +140,7 @@ gtk_filter_match (GtkFilter *self,
* Gets the known strictness of @filters. If the strictness is not known,
* %GTK_FILTER_MATCH_SOME is returned.
*
* This value may change after emission of the #GtkFilter:changed signal.
* This value may change after emission of the GtkFilter:changed signal.
*
* This function is meant purely for optimization purposes, filters can
* choose to omit implementing it, but #GtkFilterListModel uses it.
+4 -10
View File
@@ -771,8 +771,8 @@ gtk_filter_list_model_get_model (GtkFilterListModel *self)
* @self: a #GtkFilterListModel
* @incremental: %TRUE to enable incremental filtering
*
* When incremental filtering is enabled, the GtkFilterListModel will not
* run filters immediately, but will instead queue an idle handler that
* When incremental filtering is enabled, the filterlistmodel will not run
* filters immediately, but will instead queue an idle handler that
* incrementally filters the items and adds them to the list. This of course
* means that items are not instantly added to the list, but only appear
* incrementally.
@@ -837,14 +837,8 @@ gtk_filter_list_model_get_incremental (GtkFilterListModel *self)
*
* You can use this value to check if @self is busy filtering by
* comparing the return value to 0 or you can compute the percentage
* of the filter remaining by dividing the return value by the total
* number of items in the underlying model:
*
* |[
* pending = gtk_filter_list_model_get_pending (self);
* model = gtk_filter_list_model_get_model (self);
* percentage = pending / (double) g_list_model_get_n_items (model);
* ]|
* of the filter remaining by dividing the return value by
* g_list_model_get_n_items(gtk_filter_list_model_get_model (self)).
*
* Returns: The number of items not yet filtered
**/
+7 -7
View File
@@ -45,7 +45,7 @@
/**
* SECTION:gtkgridview
* @title: GtkGridView
* @short_description: A widget for displaying grids
* @short_description: A widget for displaying lists in a grid
* @see_also: #GListModel, #GtkListView, #GtkColumnView
*
* GtkGridView is a widget to present a view into a large dynamic grid of items.
@@ -1092,7 +1092,7 @@ gtk_grid_view_class_init (GtkGridViewClass *klass)
g_param_spec_object ("model",
P_("Model"),
P_("Model for the items displayed"),
G_TYPE_LIST_MODEL,
GTK_TYPE_SELECTION_MODEL,
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
/**
@@ -1235,7 +1235,7 @@ gtk_grid_view_new_with_factory (GtkListItemFactory *factory)
*
* Returns: (nullable) (transfer none): The model in use
**/
GListModel *
GtkSelectionModel *
gtk_grid_view_get_model (GtkGridView *self)
{
g_return_val_if_fail (GTK_IS_GRID_VIEW (self), NULL);
@@ -1248,14 +1248,14 @@ gtk_grid_view_get_model (GtkGridView *self)
* @self: a #GtkGridView
* @model: (allow-none) (transfer none): the model to use or %NULL for none
*
* Sets the #GListModel to use for
* Sets the #GtkSelectionModel to use for
**/
void
gtk_grid_view_set_model (GtkGridView *self,
GListModel *model)
gtk_grid_view_set_model (GtkGridView *self,
GtkSelectionModel *model)
{
g_return_if_fail (GTK_IS_GRID_VIEW (self));
g_return_if_fail (model == NULL || G_IS_LIST_MODEL (model));
g_return_if_fail (model == NULL || GTK_IS_SELECTION_MODEL (model));
if (!gtk_list_base_set_model (GTK_LIST_BASE (self), model))
return;
+3 -2
View File
@@ -25,6 +25,7 @@
#endif
#include <gtk/gtklistbase.h>
#include <gtk/gtkselectionmodel.h>
G_BEGIN_DECLS
@@ -53,10 +54,10 @@ GDK_AVAILABLE_IN_ALL
GtkWidget * gtk_grid_view_new_with_factory (GtkListItemFactory *factory);
GDK_AVAILABLE_IN_ALL
GListModel * gtk_grid_view_get_model (GtkGridView *self);
GtkSelectionModel * gtk_grid_view_get_model (GtkGridView *self);
GDK_AVAILABLE_IN_ALL
void gtk_grid_view_set_model (GtkGridView *self,
GListModel *model);
GtkSelectionModel *model);
GDK_AVAILABLE_IN_ALL
void gtk_grid_view_set_factory (GtkGridView *self,
GtkListItemFactory *factory);
+5 -5
View File
@@ -3858,11 +3858,11 @@ gtk_icon_paintable_ensure_texture (GtkIconPaintable *self)
static void
init_color_matrix (graphene_matrix_t *color_matrix,
graphene_vec4_t *color_offset,
const GdkRGBA *foreground_color,
const GdkRGBA *success_color,
const GdkRGBA *warning_color,
const GdkRGBA *error_color)
graphene_vec4_t *color_offset,
const GdkRGBA *foreground_color,
const GdkRGBA *success_color,
const GdkRGBA *warning_color,
const GdkRGBA *error_color)
{
GdkRGBA fg_default = { 0.7450980392156863, 0.7450980392156863, 0.7450980392156863, 1.0};
GdkRGBA success_default = { 0.3046921492332342,0.6015716792553597, 0.023437857633325704, 1.0};
+7 -17
View File
@@ -2102,40 +2102,30 @@ gtk_list_base_grab_focus_on_item (GtkListBase *self,
return TRUE;
}
GListModel *
GtkSelectionModel *
gtk_list_base_get_model (GtkListBase *self)
{
GtkListBasePrivate *priv = gtk_list_base_get_instance_private (self);
return priv->model;
return GTK_SELECTION_MODEL (priv->model);
}
gboolean
gtk_list_base_set_model (GtkListBase *self,
GListModel *model)
gtk_list_base_set_model (GtkListBase *self,
GtkSelectionModel *model)
{
GtkListBasePrivate *priv = gtk_list_base_get_instance_private (self);
if (priv->model == model)
if (priv->model == G_LIST_MODEL (model))
return FALSE;
g_clear_object (&priv->model);
if (model)
{
GtkSelectionModel *selection_model;
priv->model = g_object_ref (model);
if (GTK_IS_SELECTION_MODEL (model))
selection_model = GTK_SELECTION_MODEL (g_object_ref (model));
else
selection_model = GTK_SELECTION_MODEL (gtk_single_selection_new (model));
gtk_list_item_manager_set_model (priv->item_manager, selection_model);
priv->model = g_object_ref (G_LIST_MODEL (model));
gtk_list_item_manager_set_model (priv->item_manager, model);
gtk_list_base_set_anchor (self, 0, 0.0, GTK_PACK_START, 0.0, GTK_PACK_START);
g_object_unref (selection_model);
}
else
{
+3 -2
View File
@@ -23,6 +23,7 @@
#include "gtklistbase.h"
#include "gtklistitemmanagerprivate.h"
#include "gtkselectionmodel.h"
#include "gtkprivate.h"
struct _GtkListBase
@@ -71,9 +72,9 @@ GtkListItemManager * gtk_list_base_get_manager (GtkListBase
GtkScrollablePolicy gtk_list_base_get_scroll_policy (GtkListBase *self,
GtkOrientation orientation);
guint gtk_list_base_get_n_items (GtkListBase *self);
GListModel * gtk_list_base_get_model (GtkListBase *self);
GtkSelectionModel * gtk_list_base_get_model (GtkListBase *self);
gboolean gtk_list_base_set_model (GtkListBase *self,
GListModel *model);
GtkSelectionModel *model);
void gtk_list_base_update_adjustments (GtkListBase *self,
int total_across,
int total_along,
+1 -1
View File
@@ -26,7 +26,7 @@
/**
* SECTION:gtklistitem
* @title: GtkListItem
* @short_description: Object used to represent items of a list model
* @short_description: Object used to represent items of a ListModel
* @see_also: #GtkListView, #GListModel
*
* #GtkListItem is the object that list-handling containers such
+9 -11
View File
@@ -831,13 +831,14 @@ gtk_list_view_class_init (GtkListViewClass *klass)
/**
* GtkListView:model:
*
* Model for the items displayed
* Model for the items displayed.
* This must be a #GtkSelectionModel
*/
properties[PROP_MODEL] =
g_param_spec_object ("model",
P_("Model"),
P_("Model for the items displayed"),
G_TYPE_LIST_MODEL,
GTK_TYPE_SELECTION_MODEL,
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
/**
@@ -989,7 +990,7 @@ gtk_list_view_new_with_factory (GtkListItemFactory *factory)
*
* Returns: (nullable) (transfer none): The model in use
**/
GListModel *
GtkSelectionModel *
gtk_list_view_get_model (GtkListView *self)
{
g_return_val_if_fail (GTK_IS_LIST_VIEW (self), NULL);
@@ -1002,17 +1003,14 @@ gtk_list_view_get_model (GtkListView *self)
* @self: a #GtkListView
* @model: (allow-none) (transfer none): the model to use or %NULL for none
*
* Sets the #GListModel to use.
*
* If the @model is a #GtkSelectionModel, it is used for managing the selection.
* Otherwise, @self creates a #GtkSingleSelection for the selection.
**/
* Sets the #GtkSelectionModel to use.
*/
void
gtk_list_view_set_model (GtkListView *self,
GListModel *model)
gtk_list_view_set_model (GtkListView *self,
GtkSelectionModel *model)
{
g_return_if_fail (GTK_IS_LIST_VIEW (self));
g_return_if_fail (model == NULL || G_IS_LIST_MODEL (model));
g_return_if_fail (model == NULL || GTK_IS_SELECTION_MODEL (model));
if (!gtk_list_base_set_model (GTK_LIST_BASE (self), model))
return;
+3 -2
View File
@@ -25,6 +25,7 @@
#endif
#include <gtk/gtklistbase.h>
#include <gtk/gtkselectionmodel.h>
G_BEGIN_DECLS
@@ -52,10 +53,10 @@ GDK_AVAILABLE_IN_ALL
GtkWidget * gtk_list_view_new_with_factory (GtkListItemFactory *factory);
GDK_AVAILABLE_IN_ALL
GListModel * gtk_list_view_get_model (GtkListView *self);
GtkSelectionModel * gtk_list_view_get_model (GtkListView *self);
GDK_AVAILABLE_IN_ALL
void gtk_list_view_set_model (GtkListView *self,
GListModel *model);
GtkSelectionModel *model);
GDK_AVAILABLE_IN_ALL
void gtk_list_view_set_factory (GtkListView *self,
GtkListItemFactory *factory);
+1
View File
@@ -181,6 +181,7 @@ static const GdkDebugKey gtk_debug_keys[] = {
{ "no-css-cache", GTK_DEBUG_NO_CSS_CACHE, "Disable style property cache" },
{ "interactive", GTK_DEBUG_INTERACTIVE, "Enable the GTK inspector" },
{ "touchscreen", GTK_DEBUG_TOUCHSCREEN, "Pretend the pointer is a touchscreen" },
{ "resize", GTK_DEBUG_RESIZE, "Highlight resizing widgets" },
{ "layout", GTK_DEBUG_LAYOUT, "Show layout borders" },
{ "snapshot", GTK_DEBUG_SNAPSHOT, "Generate debug render nodes" },
};
+65 -44
View File
@@ -25,13 +25,6 @@
#include "gtkintl.h"
#include "gtktypebuiltins.h"
#define GDK_ARRAY_TYPE_NAME GtkFilters
#define GDK_ARRAY_NAME gtk_filters
#define GDK_ARRAY_ELEMENT_TYPE GtkFilter *
#define GDK_ARRAY_FREE_FUNC g_object_unref
#include "gdk/gdkarrayimpl.c"
/*** MULTI FILTER ***/
/**
@@ -42,17 +35,17 @@
* GtkMultiFilter is the base type that implements support for handling
* multiple filters.
*
* GtkAnyFilter is a subclass of GtkMultiFilter that matches an item
* GtkAnyFilter is an implementation of GtkMultiFilter that matches an item
* when at least one of its filters matches.
*
* GtkEveryFilter is a subclass of GtkMultiFilter that matches an item
* GtkEveryFilter is an implementation of GtkMultiFilter that matches an item
* when each of its filters matches.
*/
struct _GtkMultiFilter
{
GtkFilter parent_instance;
GtkFilters filters;
GSequence *filters;
};
struct _GtkMultiFilterClass
@@ -74,7 +67,7 @@ gtk_multi_filter_get_n_items (GListModel *list)
{
GtkMultiFilter *self = GTK_MULTI_FILTER (list);
return gtk_filters_get_size (&self->filters);
return g_sequence_get_length (self->filters);
}
static gpointer
@@ -82,11 +75,14 @@ gtk_multi_filter_get_item (GListModel *list,
guint position)
{
GtkMultiFilter *self = GTK_MULTI_FILTER (list);
GSequenceIter *iter;
if (position < gtk_filters_get_size (&self->filters))
return g_object_ref (gtk_filters_get (&self->filters, position));
else
iter = g_sequence_get_iter_at_pos (self->filters, position);
if (g_sequence_iter_is_end (iter))
return NULL;
else
return g_object_ref (g_sequence_get (iter));
}
static void
@@ -131,35 +127,53 @@ gtk_multi_filter_changed_cb (GtkFilter *filter,
gtk_filter_changed (GTK_FILTER (self), change);
}
static void
gtk_multi_filter_remove_iter (GtkMultiFilter *self,
GSequenceIter *iter)
{
GtkFilter *filter;
filter = g_sequence_get (iter);
g_signal_handlers_disconnect_by_func (filter, gtk_multi_filter_changed_cb, self);
g_object_unref (filter);
g_sequence_remove (iter);
}
static void
gtk_multi_filter_dispose (GObject *object)
{
GtkMultiFilter *self = GTK_MULTI_FILTER (object);
guint i;
for (i = 0; i < gtk_filters_get_size (&self->filters); i++)
{
GtkFilter *filter = gtk_filters_get (&self->filters, i);
g_signal_handlers_disconnect_by_func (filter, gtk_multi_filter_changed_cb, self);
}
gtk_filters_clear (&self->filters);
while (!g_sequence_is_empty (self->filters))
gtk_multi_filter_remove_iter (self, g_sequence_get_begin_iter (self->filters));
G_OBJECT_CLASS (gtk_multi_filter_parent_class)->dispose (object);
}
static void
gtk_multi_filter_finalize (GObject *object)
{
GtkMultiFilter *self = GTK_MULTI_FILTER (object);
g_assert (g_sequence_is_empty (self->filters));
g_sequence_free (self->filters);
G_OBJECT_CLASS (gtk_multi_filter_parent_class)->finalize (object);
}
static void
gtk_multi_filter_class_init (GtkMultiFilterClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
object_class->dispose = gtk_multi_filter_dispose;
object_class->finalize = gtk_multi_filter_finalize;
}
static void
gtk_multi_filter_init (GtkMultiFilter *self)
{
gtk_filters_init (&self->filters);
self->filters = g_sequence_new (NULL);
}
/**
@@ -177,7 +191,7 @@ gtk_multi_filter_append (GtkMultiFilter *self,
g_return_if_fail (GTK_IS_FILTER (filter));
g_signal_connect (filter, "changed", G_CALLBACK (gtk_multi_filter_changed_cb), self);
gtk_filters_append (&self->filters, filter);
g_sequence_append (self->filters, filter);
gtk_filter_changed (GTK_FILTER (self),
GTK_MULTI_FILTER_GET_CLASS (self)->addition_change);
@@ -197,16 +211,15 @@ void
gtk_multi_filter_remove (GtkMultiFilter *self,
guint position)
{
GSequenceIter *iter;
guint length;
GtkFilter *filter;
length = gtk_filters_get_size (&self->filters);
length = g_sequence_get_length (self->filters);
if (position >= length)
return;
filter = gtk_filters_get (&self->filters, position);
g_signal_handlers_disconnect_by_func (filter, gtk_multi_filter_changed_cb, self);
gtk_filters_splice (&self->filters, position, 1, NULL, 0);
iter = g_sequence_get_iter_at_pos (self->filters, position);
gtk_multi_filter_remove_iter (self, iter);
gtk_filter_changed (GTK_FILTER (self),
GTK_MULTI_FILTER_GET_CLASS (self)->removal_change);
@@ -231,11 +244,13 @@ gtk_any_filter_match (GtkFilter *filter,
gpointer item)
{
GtkMultiFilter *self = GTK_MULTI_FILTER (filter);
guint i;
GSequenceIter *iter;
for (i = 0; i < gtk_filters_get_size (&self->filters); i++)
for (iter = g_sequence_get_begin_iter (self->filters);
!g_sequence_iter_is_end (iter);
iter = g_sequence_iter_next (iter))
{
GtkFilter *child = gtk_filters_get (&self->filters, i);
GtkFilter *child = g_sequence_get (iter);
if (gtk_filter_match (child, item))
return TRUE;
@@ -247,13 +262,15 @@ gtk_any_filter_match (GtkFilter *filter,
static GtkFilterMatch
gtk_any_filter_get_strictness (GtkFilter *filter)
{
GtkMultiFilter *self = GTK_MULTI_FILTER (filter);
guint i;
GtkMultiFilter *multi = GTK_MULTI_FILTER (filter);
GSequenceIter *iter;
GtkFilterMatch result = GTK_FILTER_MATCH_NONE;
for (i = 0; i < gtk_filters_get_size (&self->filters); i++)
for (iter = g_sequence_get_begin_iter (multi->filters);
!g_sequence_iter_is_end (iter);
iter = g_sequence_iter_next (iter))
{
GtkFilter *child = gtk_filters_get (&self->filters, i);
GtkFilter *child = g_sequence_get (iter);
switch (gtk_filter_get_strictness (child))
{
@@ -329,11 +346,13 @@ gtk_every_filter_match (GtkFilter *filter,
gpointer item)
{
GtkMultiFilter *self = GTK_MULTI_FILTER (filter);
guint i;
GSequenceIter *iter;
for (i = 0; i < gtk_filters_get_size (&self->filters); i++)
for (iter = g_sequence_get_begin_iter (self->filters);
!g_sequence_iter_is_end (iter);
iter = g_sequence_iter_next (iter))
{
GtkFilter *child = gtk_filters_get (&self->filters, i);
GtkFilter *child = g_sequence_get (iter);
if (!gtk_filter_match (child, item))
return FALSE;
@@ -345,13 +364,15 @@ gtk_every_filter_match (GtkFilter *filter,
static GtkFilterMatch
gtk_every_filter_get_strictness (GtkFilter *filter)
{
GtkMultiFilter *self = GTK_MULTI_FILTER (filter);
guint i;
GtkMultiFilter *multi = GTK_MULTI_FILTER (filter);
GSequenceIter *iter;
GtkFilterMatch result = GTK_FILTER_MATCH_ALL;
for (i = 0; i < gtk_filters_get_size (&self->filters); i++)
for (iter = g_sequence_get_begin_iter (multi->filters);
!g_sequence_iter_is_end (iter);
iter = g_sequence_iter_next (iter))
{
GtkFilter *child = gtk_filters_get (&self->filters, i);
GtkFilter *child = g_sequence_get (iter);
switch (gtk_filter_get_strictness (child))
{
@@ -392,7 +413,7 @@ gtk_every_filter_init (GtkEveryFilter *self)
/**
* gtk_every_filter_new:
*
* Creates a new empty "every" filter.
* Creates a new empty "every" filter.
* Use gtk_multi_filter_append() to add filters to it.
*
* This filter matches an item if each of the filters added to it
+52 -37
View File
@@ -25,13 +25,6 @@
#include "gtkintl.h"
#include "gtktypebuiltins.h"
#define GDK_ARRAY_TYPE_NAME GtkSorters
#define GDK_ARRAY_NAME gtk_sorters
#define GDK_ARRAY_ELEMENT_TYPE GtkSorter *
#define GDK_ARRAY_FREE_FUNC g_object_unref
#include "gdk/gdkarrayimpl.c"
/**
* SECTION:gtkmultisorter
* @Title: GtkMultiSorter
@@ -45,7 +38,7 @@ struct _GtkMultiSorter
{
GtkSorter parent_instance;
GtkSorters sorters;
GSequence *sorters;
};
static GType
@@ -59,7 +52,7 @@ gtk_multi_sorter_get_n_items (GListModel *list)
{
GtkMultiSorter *self = GTK_MULTI_SORTER (list);
return gtk_sorters_get_size (&self->sorters);
return g_sequence_get_length (self->sorters);
}
static gpointer
@@ -67,11 +60,14 @@ gtk_multi_sorter_get_item (GListModel *list,
guint position)
{
GtkMultiSorter *self = GTK_MULTI_SORTER (list);
GSequenceIter *iter;
if (position < gtk_sorters_get_size (&self->sorters))
return g_object_ref (gtk_sorters_get (&self->sorters, position));
else
iter = g_sequence_get_iter_at_pos (self->sorters, position);
if (g_sequence_iter_is_end (iter))
return NULL;
else
return g_object_ref (g_sequence_get (iter));
}
static void
@@ -115,11 +111,13 @@ gtk_multi_sorter_compare (GtkSorter *sorter,
{
GtkMultiSorter *self = GTK_MULTI_SORTER (sorter);
GtkOrdering result = GTK_ORDERING_EQUAL;
guint i;
GSequenceIter *iter;
for (i = 0; i < gtk_sorters_get_size (&self->sorters); i++)
for (iter = g_sequence_get_begin_iter (self->sorters);
!g_sequence_iter_is_end (iter);
iter = g_sequence_iter_next (iter))
{
GtkSorter *child = gtk_sorters_get (&self->sorters, i);
GtkSorter *child = g_sequence_get (iter);
result = gtk_sorter_compare (child, item1, item2);
if (result != GTK_ORDERING_EQUAL)
@@ -134,11 +132,13 @@ gtk_multi_sorter_get_order (GtkSorter *sorter)
{
GtkMultiSorter *self = GTK_MULTI_SORTER (sorter);
GtkSorterOrder result = GTK_SORTER_ORDER_NONE;
guint i;
GSequenceIter *iter;
for (i = 0; i < gtk_sorters_get_size (&self->sorters); i++)
for (iter = g_sequence_get_begin_iter (self->sorters);
!g_sequence_iter_is_end (iter);
iter = g_sequence_iter_next (iter))
{
GtkSorter *child = gtk_sorters_get (&self->sorters, i);
GtkSorter *child = g_sequence_get (iter);
GtkSorterOrder child_order;
child_order = gtk_sorter_get_order (child);
@@ -166,14 +166,12 @@ gtk_multi_sorter_changed_cb (GtkSorter *sorter,
GtkMultiSorter *self)
{
/* Using an enum on purpose, so gcc complains about this case if
* new values are added to the enum
*/
* new values are added to the enum */
switch (change)
{
case GTK_SORTER_CHANGE_INVERTED:
/* This could do a lot better with change handling, in particular in
* cases where self->n_sorters == 1 or if sorter == self->sorters[0]
*/
/* This could do a lot better with change handling, in particular in cases where self->n_sorters == 1
* or if sorter == self->sorters[0] */
change = GTK_SORTER_CHANGE_DIFFERENT;
break;
@@ -189,22 +187,39 @@ gtk_multi_sorter_changed_cb (GtkSorter *sorter,
gtk_sorter_changed (GTK_SORTER (self), change);
}
static void
gtk_multi_sorter_remove_iter (GtkMultiSorter *self,
GSequenceIter *iter)
{
GtkSorter *sorter;
sorter = g_sequence_get (iter);
g_signal_handlers_disconnect_by_func (sorter, gtk_multi_sorter_changed_cb, self);
g_object_unref (sorter);
g_sequence_remove (iter);
}
static void
gtk_multi_sorter_dispose (GObject *object)
{
GtkMultiSorter *self = GTK_MULTI_SORTER (object);
guint i;
for (i = 0; i < gtk_sorters_get_size (&self->sorters); i++)
{
GtkSorter *sorter = gtk_sorters_get (&self->sorters, i);
g_signal_handlers_disconnect_by_func (sorter, gtk_multi_sorter_changed_cb, self);
}
gtk_sorters_clear (&self->sorters);
while (!g_sequence_is_empty (self->sorters))
gtk_multi_sorter_remove_iter (self, g_sequence_get_begin_iter (self->sorters));
G_OBJECT_CLASS (gtk_multi_sorter_parent_class)->dispose (object);
}
static void
gtk_multi_sorter_finalize (GObject *object)
{
GtkMultiSorter *self = GTK_MULTI_SORTER (object);
g_sequence_free (self->sorters);
G_OBJECT_CLASS (gtk_multi_sorter_parent_class)->finalize (object);
}
static void
gtk_multi_sorter_class_init (GtkMultiSorterClass *class)
{
@@ -215,12 +230,13 @@ gtk_multi_sorter_class_init (GtkMultiSorterClass *class)
sorter_class->get_order = gtk_multi_sorter_get_order;
object_class->dispose = gtk_multi_sorter_dispose;
object_class->finalize = gtk_multi_sorter_finalize;
}
static void
gtk_multi_sorter_init (GtkMultiSorter *self)
{
gtk_sorters_init (&self->sorters);
self->sorters = g_sequence_new (NULL);
}
/**
@@ -258,7 +274,7 @@ gtk_multi_sorter_append (GtkMultiSorter *self,
g_return_if_fail (GTK_IS_SORTER (sorter));
g_signal_connect (sorter, "changed", G_CALLBACK (gtk_multi_sorter_changed_cb), self);
gtk_sorters_append (&self->sorters, sorter);
g_sequence_append (self->sorters, sorter);
gtk_sorter_changed (GTK_SORTER (self), GTK_SORTER_CHANGE_MORE_STRICT);
}
@@ -277,18 +293,17 @@ void
gtk_multi_sorter_remove (GtkMultiSorter *self,
guint position)
{
GSequenceIter *iter;
guint length;
GtkSorter *sorter;
g_return_if_fail (GTK_IS_MULTI_SORTER (self));
length = gtk_sorters_get_size (&self->sorters);
length = g_sequence_get_length (self->sorters);
if (position >= length)
return;
sorter = gtk_sorters_get (&self->sorters, position);
g_signal_handlers_disconnect_by_func (sorter, gtk_multi_sorter_changed_cb, self);
gtk_sorters_splice (&self->sorters, position, 1, NULL, 0);
iter = g_sequence_get_iter_at_pos (self->sorters, position);
gtk_multi_sorter_remove_iter (self, iter);
gtk_sorter_changed (GTK_SORTER (self), GTK_SORTER_CHANGE_LESS_STRICT);
}
+13 -11
View File
@@ -740,7 +740,7 @@ gtk_print_unix_dialog_init (GtkPrintUnixDialog *dialog)
GListModel *model;
GListModel *sorted;
GListModel *filtered;
GListModel *selection;
GtkSingleSelection *selection;
GtkSorter *sorter;
GtkFilter *filter;
GtkFilter *filter1;
@@ -833,10 +833,10 @@ gtk_print_unix_dialog_init (GtkPrintUnixDialog *dialog)
filtered = G_LIST_MODEL (gtk_filter_list_model_new (sorted, filter));
g_object_unref (filter);
selection = G_LIST_MODEL (gtk_single_selection_new (filtered));
gtk_single_selection_set_autoselect (GTK_SINGLE_SELECTION (selection), FALSE);
gtk_single_selection_set_selected (GTK_SINGLE_SELECTION (selection), GTK_INVALID_LIST_POSITION);
gtk_column_view_set_model (GTK_COLUMN_VIEW (dialog->printer_list), selection);
selection = gtk_single_selection_new (filtered);
gtk_single_selection_set_autoselect (selection, FALSE);
gtk_single_selection_set_selected (selection, GTK_INVALID_LIST_POSITION);
gtk_column_view_set_model (GTK_COLUMN_VIEW (dialog->printer_list), GTK_SELECTION_MODEL (selection));
g_signal_connect (selection, "items-changed", G_CALLBACK (printer_added_cb), dialog);
g_signal_connect_swapped (selection, "notify::selected", G_CALLBACK (selected_printer_changed), dialog);
g_object_unref (selection);
@@ -983,18 +983,18 @@ printer_status_cb (GtkPrintBackend *backend,
GtkPrinter *printer,
GtkPrintUnixDialog *dialog)
{
GListModel *model;
GtkSingleSelection *selection;
/* When the pause state change then we need to update sensitive property
* of GTK_RESPONSE_OK button inside of selected_printer_changed function.
*/
selected_printer_changed (dialog);
model = gtk_column_view_get_model (GTK_COLUMN_VIEW (dialog->printer_list));
selection = GTK_SINGLE_SELECTION (gtk_column_view_get_model (GTK_COLUMN_VIEW (dialog->printer_list)));
if (gtk_print_backend_printer_list_is_done (backend) &&
gtk_printer_is_default (printer) &&
gtk_single_selection_get_selected (GTK_SINGLE_SELECTION (model)) == GTK_INVALID_LIST_POSITION)
gtk_single_selection_get_selected (selection) == GTK_INVALID_LIST_POSITION)
set_active_printer (dialog, gtk_printer_get_name (printer));
}
@@ -1822,9 +1822,11 @@ printer_details_acquired (GtkPrinter *printer,
static void
selected_printer_changed (GtkPrintUnixDialog *dialog)
{
GListModel *model = gtk_column_view_get_model (GTK_COLUMN_VIEW (dialog->printer_list));
GtkSingleSelection *selection;
GtkPrinter *printer;
selection = GTK_SINGLE_SELECTION (gtk_column_view_get_model (GTK_COLUMN_VIEW (dialog->printer_list)));
/* Whenever the user selects a printer we stop looking for
* the printer specified in the initial settings
*/
@@ -1837,7 +1839,7 @@ selected_printer_changed (GtkPrintUnixDialog *dialog)
disconnect_printer_details_request (dialog, FALSE);
printer = gtk_single_selection_get_selected_item (GTK_SINGLE_SELECTION (model));
printer = gtk_single_selection_get_selected_item (selection);
/* sets GTK_RESPONSE_OK button sensitivity depending on whether the printer
* accepts/rejects jobs
@@ -3170,7 +3172,7 @@ set_active_printer (GtkPrintUnixDialog *dialog,
GtkPrinter *printer;
guint i;
model = gtk_column_view_get_model (GTK_COLUMN_VIEW (dialog->printer_list));
model = G_LIST_MODEL (gtk_column_view_get_model (GTK_COLUMN_VIEW (dialog->printer_list)));
for (i = 0; i < g_list_model_get_n_items (model); i++)
{
+10 -11
View File
@@ -351,6 +351,9 @@ gtk_snapshot_collect_debug (GtkSnapshot *snapshot,
if (node == NULL)
return NULL;
if (state->data.debug.message == NULL)
return node;
debug_node = gsk_debug_node_new (node, state->data.debug.message);
gsk_render_node_unref (node);
@@ -374,17 +377,15 @@ gtk_snapshot_push_debug (GtkSnapshot *snapshot,
...)
{
GtkSnapshotState *current_state = gtk_snapshot_get_current_state (snapshot);
GtkSnapshotState *state;
state = gtk_snapshot_push_state (snapshot,
current_state->transform,
gtk_snapshot_collect_debug);
if (GTK_DEBUG_CHECK (SNAPSHOT))
{
va_list args;
GtkSnapshotState *state;
state = gtk_snapshot_push_state (snapshot,
current_state->transform,
gtk_snapshot_collect_debug);
va_start (args, message);
state->data.debug.message = g_strdup_vprintf (message, args);
@@ -392,9 +393,7 @@ gtk_snapshot_push_debug (GtkSnapshot *snapshot,
}
else
{
gtk_snapshot_push_state (snapshot,
current_state->transform,
gtk_snapshot_collect_default);
state->data.debug.message = NULL;
}
}
@@ -1823,7 +1822,7 @@ gtk_snapshot_render_layout (GtkSnapshot *snapshot,
fg_color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR));
shadows_value = _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_TEXT_SHADOW);
has_shadow = gtk_css_shadow_value_push_snapshot (shadows_value, snapshot);
has_shadow = gtk_css_shadow_value_push_snapshot (shadows_value, snapshot);
gtk_snapshot_append_layout (snapshot, layout, fg_color);
+3 -2
View File
@@ -37,8 +37,9 @@
* by calling gtk_sorter_compare() for pairs of items.
*
* Sorters may change their sorting behavior through their lifetime. In that case,
* they will emit the #GtkSorter::changed signal to notify that the sort order is
* no longer valid and should be updated by calling gtk_sorter_compare() again.
* they call gtk_sorter_changed(), which will emit the #GtkSorter::changed signal to
* notify that the sort order is no longer valid and should be updated by calling
* gtk_sorter_compare() again.
*
* GTK provides various pre-made sorter implementations for common sorting operations.
* #GtkColumnView has built-in support for sorting lists via the #GtkColumnViewColumn:sorter
+2 -2
View File
@@ -27,7 +27,7 @@
/**
* SECTION:gtkstringfilter
* @Title: GtkStringFilter
* @Short_description: Filtering by strings
* @Short_description: Filtering by string
*
* GtkStringFilter determines whether to include items by looking
* at strings and comparing them to a fixed search term. The strings
@@ -302,7 +302,7 @@ gtk_string_filter_init (GtkStringFilter *self)
}
/**
* gtk_string_filter_new:
* gtk_s tring_filter_new:
* @expression: (transfer full) (nullable): The expression to evaluate
* or %NULL for none
*
+1 -1
View File
@@ -51,7 +51,7 @@ GDK_AVAILABLE_IN_ALL
G_DECLARE_FINAL_TYPE (GtkStringFilter, gtk_string_filter, GTK, STRING_FILTER, GtkFilter)
GDK_AVAILABLE_IN_ALL
GtkFilter * gtk_string_filter_new (GtkExpression *expression);
GtkFilter * gtk_string_filter_new (GtkExpression *exporession);
GDK_AVAILABLE_IN_ALL
const char * gtk_string_filter_get_search (GtkStringFilter *self);
+4 -4
View File
@@ -2681,7 +2681,6 @@ gtk_text_click_gesture_pressed (GtkGestureClick *gesture,
{
priv->in_click = TRUE;
gtk_widget_grab_focus (widget);
gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
priv->in_click = FALSE;
}
@@ -2690,7 +2689,6 @@ gtk_text_click_gesture_pressed (GtkGestureClick *gesture,
if (gdk_event_triggers_context_menu (event))
{
gtk_text_do_popup (self, widget_x, widget_y);
gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
}
else if (n_press == 1 && button == GDK_BUTTON_MIDDLE &&
get_middle_click_paste (self))
@@ -2704,8 +2702,6 @@ gtk_text_click_gesture_pressed (GtkGestureClick *gesture,
{
gtk_widget_error_bell (widget);
}
gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
}
else if (button == GDK_BUTTON_PRIMARY)
{
@@ -2825,9 +2821,13 @@ gtk_text_click_gesture_pressed (GtkGestureClick *gesture,
gtk_text_set_positions (self, end, start);
}
gtk_text_update_handles (self);
}
if (button != GDK_BUTTON_PRIMARY || n_press >= 3)
gtk_gesture_set_state (priv->drag_gesture, GTK_EVENT_SEQUENCE_CLAIMED);
if (n_press >= 3)
gtk_event_controller_reset (GTK_EVENT_CONTROLLER (gesture));
}
+1520 -1789
View File
File diff suppressed because it is too large Load Diff
+5 -58
View File
@@ -50,15 +50,11 @@ typedef enum
GTK_TREE_VIEW_DROP_INTO_OR_AFTER
} GtkTreeViewDropPosition;
#define GTK_TYPE_TREE_VIEW (gtk_tree_view_get_type ())
#define GTK_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TREE_VIEW, GtkTreeView))
#define GTK_IS_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TREE_VIEW))
#define GTK_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TREE_VIEW, GtkTreeViewClass))
#define GTK_IS_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TREE_VIEW))
#define GTK_TREE_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TREE_VIEW, GtkTreeViewClass))
#define GTK_TYPE_TREE_VIEW (gtk_tree_view_get_type ())
#define GTK_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TREE_VIEW, GtkTreeView))
#define GTK_IS_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TREE_VIEW))
typedef struct _GtkTreeView GtkTreeView;
typedef struct _GtkTreeViewClass GtkTreeViewClass;
typedef struct _GtkTreeSelection GtkTreeSelection;
/**
@@ -137,60 +133,11 @@ typedef gboolean (*GtkTreeViewRowSeparatorFunc) (GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data);
struct _GtkTreeView
{
GtkWidget parent_instance;
};
struct _GtkTreeViewClass
{
GtkWidgetClass parent_class;
void (* row_activated) (GtkTreeView *tree_view,
GtkTreePath *path,
GtkTreeViewColumn *column);
gboolean (* test_expand_row) (GtkTreeView *tree_view,
GtkTreeIter *iter,
GtkTreePath *path);
gboolean (* test_collapse_row) (GtkTreeView *tree_view,
GtkTreeIter *iter,
GtkTreePath *path);
void (* row_expanded) (GtkTreeView *tree_view,
GtkTreeIter *iter,
GtkTreePath *path);
void (* row_collapsed) (GtkTreeView *tree_view,
GtkTreeIter *iter,
GtkTreePath *path);
void (* columns_changed) (GtkTreeView *tree_view);
void (* cursor_changed) (GtkTreeView *tree_view);
/* Key Binding signals */
gboolean (* move_cursor) (GtkTreeView *tree_view,
GtkMovementStep step,
gint count,
gboolean extend,
gboolean modify);
gboolean (* select_all) (GtkTreeView *tree_view);
gboolean (* unselect_all) (GtkTreeView *tree_view);
gboolean (* select_cursor_row) (GtkTreeView *tree_view,
gboolean start_editing);
gboolean (* toggle_cursor_row) (GtkTreeView *tree_view);
gboolean (* expand_collapse_cursor_row) (GtkTreeView *tree_view,
gboolean logical,
gboolean expand,
gboolean open_all);
gboolean (* select_cursor_parent) (GtkTreeView *tree_view);
gboolean (* start_interactive_search) (GtkTreeView *tree_view);
/*< private >*/
gpointer _reserved[16];
};
GDK_AVAILABLE_IN_ALL
GType gtk_tree_view_get_type (void) G_GNUC_CONST;
/* Creators */
GDK_AVAILABLE_IN_ALL
GType gtk_tree_view_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GtkWidget *gtk_tree_view_new (void);
GDK_AVAILABLE_IN_ALL
GtkWidget *gtk_tree_view_new_with_model (GtkTreeModel *model);
+42 -2
View File
@@ -2254,6 +2254,9 @@ gtk_widget_init (GTypeInstance *instance, gpointer g_class)
priv->alloc_needed_on_child = TRUE;
priv->draw_needed = TRUE;
priv->focus_on_click = TRUE;
#ifdef G_ENABLE_DEBUG
priv->highlight_resize = FALSE;
#endif
priv->can_focus = TRUE;
priv->focusable = FALSE;
priv->can_target = TRUE;
@@ -3808,6 +3811,12 @@ gtk_widget_allocate (GtkWidget *widget,
}
#ifdef G_ENABLE_DEBUG
if (GTK_DISPLAY_DEBUG_CHECK (_gtk_widget_get_display (widget), RESIZE))
{
priv->highlight_resize = TRUE;
gtk_widget_queue_draw (widget);
}
if (gtk_widget_get_resize_needed (widget))
{
g_warning ("Allocating size to %s %p without calling gtk_widget_measure(). "
@@ -11347,6 +11356,32 @@ gtk_widget_list_controllers (GtkWidget *widget,
return (GtkEventController **)g_ptr_array_free (controllers, FALSE);
}
static inline void
gtk_widget_maybe_add_debug_render_nodes (GtkWidget *widget,
GtkSnapshot *snapshot)
{
#ifdef G_ENABLE_DEBUG
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
GdkDisplay *display = _gtk_widget_get_display (widget);
if (GTK_DISPLAY_DEBUG_CHECK (display, RESIZE) && priv->highlight_resize)
{
GdkRGBA blue = {0, 0, 1, 0.2};
graphene_rect_t bounds;
graphene_rect_init (&bounds,
0, 0,
priv->width, priv->height);
gtk_snapshot_append_color (snapshot,
&blue,
&bounds);
priv->highlight_resize = FALSE;
gtk_widget_queue_draw (widget);
}
#endif
}
static GskRenderNode *
gtk_widget_create_render_node (GtkWidget *widget,
GtkSnapshot *snapshot)
@@ -11373,8 +11408,9 @@ gtk_widget_create_render_node (GtkWidget *widget,
"RenderNode for %s %p",
G_OBJECT_TYPE_NAME (widget), widget);
filter_value = style->other->filter;
gtk_css_filter_value_push_snapshot (filter_value, snapshot);
filter_value = gtk_css_node_get_style (priv->cssnode)->other->filter;
if (filter_value)
gtk_css_filter_value_push_snapshot (filter_value, snapshot);
if (opacity < 1.0)
gtk_snapshot_push_opacity (snapshot, opacity);
@@ -11400,6 +11436,10 @@ gtk_widget_create_render_node (GtkWidget *widget,
gtk_css_filter_value_pop_snapshot (filter_value, snapshot);
#ifdef G_ENABLE_DEBUG
gtk_widget_maybe_add_debug_render_nodes (widget, snapshot);
#endif
gtk_snapshot_pop (snapshot);
return gtk_snapshot_pop_collect (snapshot);
+4
View File
@@ -66,6 +66,10 @@ struct _GtkWidgetPrivate
guint direction : 2;
#ifdef G_ENABLE_DEBUG
guint highlight_resize : 1;
#endif
guint in_destruction : 1;
guint realized : 1;
guint mapped : 1;
+69 -83
View File
@@ -24,14 +24,9 @@
#include "gtktogglebutton.h"
#include "gtkentry.h"
#include "gtklabel.h"
#include "gtkbox.h"
#include "gtkboxlayout.h"
#include "gtkorientable.h"
struct _GtkInspectorActionEditor
struct _GtkInspectorActionEditorPrivate
{
GtkWidget parent;
GActionGroup *group;
gchar *name;
gboolean enabled;
@@ -43,11 +38,6 @@ struct _GtkInspectorActionEditor
GtkSizeGroup *sg;
};
typedef struct
{
GtkWidgetClass parent;
} GtkInspectorActionEditorClass;
enum
{
PROP_0,
@@ -56,22 +46,21 @@ enum
PROP_SIZEGROUP
};
G_DEFINE_TYPE (GtkInspectorActionEditor, gtk_inspector_action_editor, GTK_TYPE_WIDGET)
G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorActionEditor, gtk_inspector_action_editor, GTK_TYPE_BOX)
static void
gtk_inspector_action_editor_init (GtkInspectorActionEditor *editor)
{
GtkBoxLayout *layout;
layout = GTK_BOX_LAYOUT (gtk_widget_get_layout_manager (GTK_WIDGET (editor)));
gtk_orientable_set_orientation (GTK_ORIENTABLE (layout), GTK_ORIENTATION_HORIZONTAL);
gtk_box_layout_set_spacing (layout, 10);
editor->priv = gtk_inspector_action_editor_get_instance_private (editor);
g_object_set (editor,
"orientation", GTK_ORIENTATION_HORIZONTAL,
"spacing", 10,
NULL);
}
typedef void (*VariantEditorChanged) (GtkWidget *editor, gpointer data);
typedef struct
{
typedef struct {
GtkWidget *editor;
VariantEditorChanged callback;
gpointer data;
@@ -103,7 +92,7 @@ variant_editor_new (const GVariantType *type,
{
editor = gtk_toggle_button_new_with_label ("FALSE");
g_signal_connect (editor, "notify::active", G_CALLBACK (variant_editor_changed_cb), d);
}
}
else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING))
{
editor = gtk_entry_new ();
@@ -206,9 +195,9 @@ activate_action (GtkWidget *button,
{
GVariant *parameter = NULL;
if (r->parameter_entry)
parameter = variant_editor_get_value (r->parameter_entry);
g_action_group_activate_action (r->group, r->name, parameter);
if (r->priv->parameter_entry)
parameter = variant_editor_get_value (r->priv->parameter_entry);
g_action_group_activate_action (r->priv->group, r->priv->name, parameter);
}
static void
@@ -219,7 +208,7 @@ parameter_changed (GtkWidget *editor,
GVariant *value;
value = variant_editor_get_value (editor);
gtk_widget_set_sensitive (r->activate_button, r->enabled && value != NULL);
gtk_widget_set_sensitive (r->priv->activate_button, r->priv->enabled && value != NULL);
if (value)
g_variant_unref (value);
}
@@ -233,21 +222,21 @@ state_changed (GtkWidget *editor,
value = variant_editor_get_value (editor);
if (value)
g_action_group_change_action_state (r->group, r->name, value);
g_action_group_change_action_state (r->priv->group, r->priv->name, value);
}
static void
update_enabled (GtkInspectorActionEditor *r,
gboolean enabled)
{
r->enabled = enabled;
if (r->parameter_entry)
r->priv->enabled = enabled;
if (r->priv->parameter_entry)
{
gtk_widget_set_sensitive (r->parameter_entry, enabled);
parameter_changed (r->parameter_entry, r);
gtk_widget_set_sensitive (r->priv->parameter_entry, enabled);
parameter_changed (r->priv->parameter_entry, r);
}
if (r->activate_button)
gtk_widget_set_sensitive (r->activate_button, enabled);
if (r->priv->activate_button)
gtk_widget_set_sensitive (r->priv->activate_button, enabled);
}
static void
@@ -256,16 +245,18 @@ action_enabled_changed_cb (GActionGroup *group,
gboolean enabled,
GtkInspectorActionEditor *r)
{
if (g_str_equal (action_name, r->name))
update_enabled (r, enabled);
if (!g_str_equal (action_name, r->priv->name))
return;
update_enabled (r, enabled);
}
static void
update_state (GtkInspectorActionEditor *r,
GVariant *state)
{
if (r->state_entry)
variant_editor_set_value (r->state_entry, state);
if (r->priv->state_entry)
variant_editor_set_value (r->priv->state_entry, state);
}
static void
@@ -274,8 +265,10 @@ action_state_changed_cb (GActionGroup *group,
GVariant *state,
GtkInspectorActionEditor *r)
{
if (g_str_equal (action_name, r->name))
update_state (r, state);
if (!g_str_equal (action_name, r->priv->name))
return;
update_state (r, state);
}
static void
@@ -287,68 +280,64 @@ constructed (GObject *object)
GtkWidget *activate;
GtkWidget *label;
r->enabled = g_action_group_get_action_enabled (r->group, r->name);
state = g_action_group_get_action_state (r->group, r->name);
r->priv->enabled = g_action_group_get_action_enabled (r->priv->group, r->priv->name);
state = g_action_group_get_action_state (r->priv->group, r->priv->name);
row = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
activate = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
gtk_box_append (GTK_BOX (row), activate);
if (r->sg)
gtk_size_group_add_widget (r->sg, activate);
if (r->priv->sg)
gtk_size_group_add_widget (r->priv->sg, activate);
r->activate_button = gtk_button_new_with_label (_("Activate"));
g_signal_connect (r->activate_button, "clicked", G_CALLBACK (activate_action), r);
r->priv->activate_button = gtk_button_new_with_label (_("Activate"));
g_signal_connect (r->priv->activate_button, "clicked", G_CALLBACK (activate_action), r);
gtk_widget_set_sensitive (r->activate_button, r->enabled);
gtk_box_append (GTK_BOX (activate), r->activate_button);
gtk_widget_set_sensitive (r->priv->activate_button, r->priv->enabled);
gtk_box_append (GTK_BOX (activate), r->priv->activate_button);
r->parameter_type = g_action_group_get_action_parameter_type (r->group, r->name);
if (r->parameter_type)
r->priv->parameter_type = g_action_group_get_action_parameter_type (r->priv->group, r->priv->name);
if (r->priv->parameter_type)
{
r->parameter_entry = variant_editor_new (r->parameter_type, parameter_changed, r);
gtk_widget_set_sensitive (r->parameter_entry, r->enabled);
gtk_box_append (GTK_BOX (activate), r->parameter_entry);
r->priv->parameter_entry = variant_editor_new (r->priv->parameter_type, parameter_changed, r);
gtk_widget_set_sensitive (r->priv->parameter_entry, r->priv->enabled);
gtk_box_append (GTK_BOX (activate), r->priv->parameter_entry);
}
gtk_widget_set_parent (row, GTK_WIDGET (r));
gtk_box_append (GTK_BOX (r), row);
if (state)
{
r->state_type = g_variant_type_copy (g_variant_get_type (state));
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"));
if (r->sg)
gtk_size_group_add_widget (r->sg, label);
if (r->priv->sg)
gtk_size_group_add_widget (r->priv->sg, label);
gtk_box_append (GTK_BOX (row), label);
r->state_entry = variant_editor_new (r->state_type, state_changed, r);
variant_editor_set_value (r->state_entry, state);
gtk_box_append (GTK_BOX (row), r->state_entry);
gtk_widget_set_parent (row, GTK_WIDGET (r));
r->priv->state_entry = variant_editor_new (r->priv->state_type, state_changed, r);
variant_editor_set_value (r->priv->state_entry, state);
gtk_box_append (GTK_BOX (row), r->priv->state_entry);
gtk_box_append (GTK_BOX (r), row);
}
g_signal_connect (r->group, "action-enabled-changed",
g_signal_connect (r->priv->group, "action-enabled-changed",
G_CALLBACK (action_enabled_changed_cb), r);
g_signal_connect (r->group, "action-state-changed",
g_signal_connect (r->priv->group, "action-state-changed",
G_CALLBACK (action_state_changed_cb), r);
}
static void
dispose (GObject *object)
finalize (GObject *object)
{
GtkInspectorActionEditor *r = GTK_INSPECTOR_ACTION_EDITOR (object);
GtkWidget *child;
g_free (r->name);
g_clear_object (&r->sg);
if (r->state_type)
g_variant_type_free (r->state_type);
g_signal_handlers_disconnect_by_func (r->group, action_enabled_changed_cb, r);
g_signal_handlers_disconnect_by_func (r->group, action_state_changed_cb, r);
g_free (r->priv->name);
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);
g_signal_handlers_disconnect_by_func (r->priv->group, action_state_changed_cb, r);
while ((child = gtk_widget_get_first_child (GTK_WIDGET (r))))
gtk_widget_unparent (child);
G_OBJECT_CLASS (gtk_inspector_action_editor_parent_class)->dispose (object);
G_OBJECT_CLASS (gtk_inspector_action_editor_parent_class)->finalize (object);
}
static void
@@ -362,15 +351,15 @@ get_property (GObject *object,
switch (param_id)
{
case PROP_GROUP:
g_value_set_object (value, r->group);
g_value_set_object (value, r->priv->group);
break;
case PROP_NAME:
g_value_set_string (value, r->name);
g_value_set_string (value, r->priv->name);
break;
case PROP_SIZEGROUP:
g_value_set_object (value, r->sg);
g_value_set_object (value, r->priv->sg);
break;
default:
@@ -390,16 +379,16 @@ set_property (GObject *object,
switch (param_id)
{
case PROP_GROUP:
r->group = g_value_get_object (value);
r->priv->group = g_value_get_object (value);
break;
case PROP_NAME:
g_free (r->name);
r->name = g_value_dup_string (value);
g_free (r->priv->name);
r->priv->name = g_value_dup_string (value);
break;
case PROP_SIZEGROUP:
r->sg = g_value_dup_object (value);
r->priv->sg = g_value_dup_object (value);
break;
default:
@@ -412,10 +401,9 @@ static void
gtk_inspector_action_editor_class_init (GtkInspectorActionEditorClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->constructed = constructed;
object_class->dispose = dispose;
object_class->finalize = finalize;
object_class->get_property = get_property;
object_class->set_property = set_property;
@@ -429,8 +417,6 @@ gtk_inspector_action_editor_class_init (GtkInspectorActionEditorClass *klass)
g_object_class_install_property (object_class, PROP_SIZEGROUP,
g_param_spec_object ("sizegroup", "Size Group", "The Size Group for activate",
GTK_TYPE_SIZE_GROUP, G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT);
}
GtkWidget *
+17 -2
View File
@@ -19,19 +19,34 @@
#define _GTK_INSPECTOR_ACTION_EDITOR_H_
#include <gtk/gtkwidget.h>
#include <gtk/gtkbox.h>
#include <gtk/gtksizegroup.h>
#define GTK_TYPE_INSPECTOR_ACTION_EDITOR (gtk_inspector_action_editor_get_type())
#define GTK_INSPECTOR_ACTION_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_ACTION_EDITOR, GtkInspectorActionEditor))
#define GTK_INSPECTOR_ACTION_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_INSPECTOR_ACTION_EDITOR, GtkInspectorActionEditorClass))
#define GTK_INSPECTOR_IS_ACTION_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INSPECTOR_ACTION_EDITOR))
#define GTK_INSPECTOR_IS_ACTION_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_INSPECTOR_ACTION_EDITOR))
#define GTK_INSPECTOR_ACTION_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_INSPECTOR_ACTION_EDITOR, GtkInspectorActionEditorClass))
typedef struct _GtkInspectorActionEditorPrivate GtkInspectorActionEditorPrivate;
typedef struct
{
GtkBox parent;
GtkInspectorActionEditorPrivate *priv;
} GtkInspectorActionEditor;
typedef struct
{
GtkBoxClass parent;
} GtkInspectorActionEditorClass;
typedef struct _GtkInspectorActionEditor GtkInspectorActionEditor;
G_BEGIN_DECLS
GType gtk_inspector_action_editor_get_type (void);
GtkWidget *gtk_inspector_action_editor_new (GActionGroup *group,
const gchar *name,
+35 -54
View File
@@ -34,13 +34,9 @@
#include "gtklistbox.h"
#include "gtkstylecontext.h"
#include "gtksizegroup.h"
#include "gtkboxlayout.h"
struct _GtkInspectorActions
struct _GtkInspectorActionsPrivate
{
GtkWidget parent;
GtkWidget *list;
GtkWidget *button;
@@ -49,27 +45,18 @@ struct _GtkInspectorActions
GtkColumnViewColumn *name;
};
typedef struct _GtkInspectorActionsClass
{
GtkWidgetClass parent;
} GtkInspectorActionsClass;
enum {
PROP_0,
PROP_BUTTON
};
G_DEFINE_TYPE (GtkInspectorActions, gtk_inspector_actions, GTK_TYPE_WIDGET)
G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorActions, gtk_inspector_actions, GTK_TYPE_BOX)
static void
gtk_inspector_actions_init (GtkInspectorActions *sl)
{
GtkBoxLayout *layout;
sl->priv = gtk_inspector_actions_get_instance_private (sl);
gtk_widget_init_template (GTK_WIDGET (sl));
layout = GTK_BOX_LAYOUT (gtk_widget_get_layout_manager (GTK_WIDGET (sl)));
gtk_orientable_set_orientation (GTK_ORIENTABLE (layout), GTK_ORIENTATION_VERTICAL);
}
static void
@@ -78,7 +65,7 @@ action_added_cb (GActionGroup *group,
GtkInspectorActions *sl)
{
ActionHolder *holder = action_holder_new (group, action_name);
g_list_store_append (G_LIST_STORE (sl->actions), holder);
g_list_store_append (G_LIST_STORE (sl->priv->actions), holder);
g_object_unref (holder);
}
@@ -246,13 +233,13 @@ action_removed_cb (GActionGroup *group,
{
int i;
for (i = 0; i < g_list_model_get_n_items (sl->actions); i++)
for (i = 0; i < g_list_model_get_n_items (sl->priv->actions); i++)
{
ActionHolder *holder = g_list_model_get_item (sl->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->actions), i);
g_list_store_remove (G_LIST_STORE (sl->priv->actions), i);
g_object_unref (holder);
}
@@ -265,13 +252,13 @@ notify_action_changed (GtkInspectorActions *sl,
{
int i;
for (i = 0; i < g_list_model_get_n_items (sl->actions); i++)
for (i = 0; i < g_list_model_get_n_items (sl->priv->actions); i++)
{
ActionHolder *holder = g_list_model_get_item (sl->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->actions, i, 1, 1);
g_list_model_items_changed (sl->priv->actions, i, 1, 1);
g_object_unref (holder);
}
@@ -298,8 +285,8 @@ action_state_changed_cb (GActionGroup *group,
static void
refresh_all (GtkInspectorActions *sl)
{
guint n = g_list_model_get_n_items (sl->actions);
g_list_model_items_changed (sl->actions, 0, n, n);
guint n = g_list_model_get_n_items (sl->priv->actions);
g_list_model_items_changed (sl->priv->actions, 0, n, n);
}
static void
@@ -339,7 +326,7 @@ add_group (GtkInspectorActions *sl,
action_added_cb (group, names[i], sl);
g_strfreev (names);
g_set_object (&sl->group, group);
g_set_object (&sl->priv->group, group);
}
static void
@@ -349,7 +336,7 @@ remove_group (GtkInspectorActions *sl,
{
disconnect_group (group, sl);
g_set_object (&sl->group, NULL);
g_set_object (&sl->priv->group, NULL);
}
void
@@ -364,10 +351,10 @@ gtk_inspector_actions_set_object (GtkInspectorActions *sl,
g_object_set (page, "visible", FALSE, NULL);
if (sl->group)
remove_group (sl, page, sl->group);
if (sl->priv->group)
remove_group (sl, page, sl->priv->group);
g_list_store_remove_all (G_LIST_STORE (sl->actions));
g_list_store_remove_all (G_LIST_STORE (sl->priv->actions));
if (GTK_IS_APPLICATION (object))
add_group (sl, page, G_ACTION_GROUP (object));
@@ -380,7 +367,7 @@ gtk_inspector_actions_set_object (GtkInspectorActions *sl,
add_group (sl, page, G_ACTION_GROUP (muxer));
}
gtk_column_view_sort_by_column (GTK_COLUMN_VIEW (sl->list), sl->name, GTK_SORT_ASCENDING);
gtk_column_view_sort_by_column (GTK_COLUMN_VIEW (sl->priv->list), sl->priv->name, GTK_SORT_ASCENDING);
}
static void
@@ -394,7 +381,7 @@ get_property (GObject *object,
switch (param_id)
{
case PROP_BUTTON:
g_value_set_object (value, sl->button);
g_value_set_object (value, sl->priv->button);
break;
default:
@@ -414,7 +401,7 @@ set_property (GObject *object,
switch (param_id)
{
case PROP_BUTTON:
sl->button = g_value_get_object (value);
sl->priv->button = g_value_get_object (value);
break;
default:
@@ -435,9 +422,9 @@ constructed (GObject *object)
GtkInspectorActions *sl = GTK_INSPECTOR_ACTIONS (object);
GtkSorter *sorter;
GListModel *sorted;
GListModel *model;
GtkSelectionModel *model;
g_signal_connect_swapped (sl->button, "clicked",
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,
@@ -445,30 +432,26 @@ constructed (GObject *object)
0, NULL,
(GCallback)holder_name,
NULL, NULL));
gtk_column_view_column_set_sorter (sl->name, sorter);
gtk_column_view_column_set_sorter (sl->priv->name, sorter);
g_object_unref (sorter);
sl->actions = G_LIST_MODEL (g_list_store_new (ACTION_TYPE_HOLDER));
sorted = G_LIST_MODEL (gtk_sort_list_model_new (sl->actions,
gtk_column_view_get_sorter (GTK_COLUMN_VIEW (sl->list))));
model = G_LIST_MODEL (gtk_no_selection_new (sorted));
gtk_column_view_set_model (GTK_COLUMN_VIEW (sl->list), model);
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 = GTK_SELECTION_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
dispose (GObject *object)
finalize (GObject *object)
{
GtkInspectorActions *sl = GTK_INSPECTOR_ACTIONS (object);
GtkWidget *child;
g_clear_object (&sl->actions);
g_object_unref (sl->priv->actions);
while ((child = gtk_widget_get_first_child (GTK_WIDGET (sl))))
gtk_widget_unparent (child);
G_OBJECT_CLASS (gtk_inspector_actions_parent_class)->dispose (object);
G_OBJECT_CLASS (gtk_inspector_actions_parent_class)->finalize (object);
}
static void
@@ -476,8 +459,8 @@ gtk_inspector_actions_class_init (GtkInspectorActionsClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->dispose = dispose;
object_class->finalize = finalize;
object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->constructed = constructed;
@@ -487,8 +470,8 @@ gtk_inspector_actions_class_init (GtkInspectorActionsClass *klass)
GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/actions.ui");
gtk_widget_class_bind_template_child (widget_class, GtkInspectorActions, list);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorActions, name);
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_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);
@@ -499,8 +482,6 @@ gtk_inspector_actions_class_init (GtkInspectorActionsClass *klass)
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);
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT);
}
// vim: set et sw=2 ts=2:
+17 -2
View File
@@ -18,13 +18,28 @@
#ifndef _GTK_INSPECTOR_ACTIONS_H_
#define _GTK_INSPECTOR_ACTIONS_H_
#include <gtk/gtkwidget.h>
#include <gtk/gtkbox.h>
#define GTK_TYPE_INSPECTOR_ACTIONS (gtk_inspector_actions_get_type())
#define GTK_INSPECTOR_ACTIONS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_ACTIONS, GtkInspectorActions))
#define GTK_INSPECTOR_ACTIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_INSPECTOR_ACTIONS, GtkInspectorActionsClass))
#define GTK_INSPECTOR_IS_ACTIONS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INSPECTOR_ACTIONS))
#define GTK_INSPECTOR_IS_ACTIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_INSPECTOR_ACTIONS))
#define GTK_INSPECTOR_ACTIONS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_INSPECTOR_ACTIONS, GtkInspectorActionsClass))
typedef struct _GtkInspectorActions GtkInspectorActions;
typedef struct _GtkInspectorActionsPrivate GtkInspectorActionsPrivate;
typedef struct _GtkInspectorActions
{
GtkBox parent;
GtkInspectorActionsPrivate *priv;
} GtkInspectorActions;
typedef struct _GtkInspectorActionsClass
{
GtkBoxClass parent;
} GtkInspectorActionsClass;
G_BEGIN_DECLS
+2 -1
View File
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="gtk40">
<template class="GtkInspectorActions" parent="GtkWidget">
<template class="GtkInspectorActions" parent="GtkBox">
<property name="orientation">vertical</property>
<style>
<class name="view"/>
</style>
+134 -140
View File
@@ -61,10 +61,8 @@
#include <vulkan/vulkan.h>
#endif
struct _GtkInspectorGeneral
struct _GtkInspectorGeneralPrivate
{
GtkWidget parent;
GtkWidget *swin;
GtkWidget *box;
GtkWidget *version_box;
@@ -99,12 +97,7 @@ struct _GtkInspectorGeneral
GdkDisplay *display;
};
typedef struct _GtkInspectorGeneralClass
{
GtkWidgetClass parent_class;
} GtkInspectorGeneralClass;
G_DEFINE_TYPE (GtkInspectorGeneral, gtk_inspector_general, GTK_TYPE_WIDGET)
G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorGeneral, gtk_inspector_general, GTK_TYPE_WIDGET)
static void
init_version (GtkInspectorGeneral *gen)
@@ -115,33 +108,33 @@ init_version (GtkInspectorGeneral *gen)
const char *renderer;
#ifdef GDK_WINDOWING_X11
if (GDK_IS_X11_DISPLAY (gen->display))
if (GDK_IS_X11_DISPLAY (gen->priv->display))
backend = "X11";
else
#endif
#ifdef GDK_WINDOWING_WAYLAND
if (GDK_IS_WAYLAND_DISPLAY (gen->display))
if (GDK_IS_WAYLAND_DISPLAY (gen->priv->display))
backend = "Wayland";
else
#endif
#ifdef GDK_WINDOWING_BROADWAY
if (GDK_IS_BROADWAY_DISPLAY (gen->display))
if (GDK_IS_BROADWAY_DISPLAY (gen->priv->display))
backend = "Broadway";
else
#endif
#ifdef GDK_WINDOWING_WIN32
if (GDK_IS_WIN32_DISPLAY (gen->display))
if (GDK_IS_WIN32_DISPLAY (gen->priv->display))
backend = "Windows";
else
#endif
#ifdef GDK_WINDOWING_QUARTZ
if (GDK_IS_QUARTZ_DISPLAY (gen->display))
if (GDK_IS_QUARTZ_DISPLAY (gen->priv->display))
backend = "Quartz";
else
#endif
backend = "Unknown";
surface = gdk_surface_new_toplevel (gen->display, 10, 10);
surface = gdk_surface_new_toplevel (gen->priv->display, 10, 10);
gsk_renderer = gsk_renderer_new_for_surface (surface);
if (strcmp (G_OBJECT_TYPE_NAME (gsk_renderer), "GskVulkanRenderer") == 0)
renderer = "Vulkan";
@@ -156,9 +149,9 @@ init_version (GtkInspectorGeneral *gen)
g_object_unref (gsk_renderer);
gdk_surface_destroy (surface);
gtk_label_set_text (GTK_LABEL (gen->gtk_version), GTK_VERSION);
gtk_label_set_text (GTK_LABEL (gen->gdk_backend), backend);
gtk_label_set_text (GTK_LABEL (gen->gsk_renderer), renderer);
gtk_label_set_text (GTK_LABEL (gen->priv->gtk_version), GTK_VERSION);
gtk_label_set_text (GTK_LABEL (gen->priv->gdk_backend), backend);
gtk_label_set_text (GTK_LABEL (gen->priv->gsk_renderer), renderer);
}
static G_GNUC_UNUSED void
@@ -198,7 +191,7 @@ add_check_row (GtkInspectorGeneral *gen,
gtk_widget_set_hexpand (box, FALSE);
gtk_list_box_insert (list, row, -1);
gtk_size_group_add_widget (GTK_SIZE_GROUP (gen->labels), label);
gtk_size_group_add_widget (GTK_SIZE_GROUP (gen->priv->labels), label);
}
static void
@@ -241,7 +234,7 @@ add_label_row (GtkInspectorGeneral *gen,
gtk_widget_set_hexpand (box, FALSE);
gtk_list_box_insert (GTK_LIST_BOX (list), row, -1);
gtk_size_group_add_widget (GTK_SIZE_GROUP (gen->labels), label);
gtk_size_group_add_widget (GTK_SIZE_GROUP (gen->priv->labels), label);
}
#ifdef GDK_WINDOWING_X11
@@ -250,7 +243,7 @@ append_glx_extension_row (GtkInspectorGeneral *gen,
Display *dpy,
const gchar *ext)
{
add_check_row (gen, GTK_LIST_BOX (gen->gl_box), ext, epoxy_has_glx_extension (dpy, 0, ext), 0);
add_check_row (gen, GTK_LIST_BOX (gen->priv->gl_box), ext, epoxy_has_glx_extension (dpy, 0, ext), 0);
}
#endif
@@ -260,7 +253,7 @@ append_egl_extension_row (GtkInspectorGeneral *gen,
EGLDisplay dpy,
const gchar *ext)
{
add_check_row (gen, GTK_LIST_BOX (gen->gl_box), ext, epoxy_has_egl_extension (dpy, ext), 0);
add_check_row (gen, GTK_LIST_BOX (gen->priv->gl_box), ext, epoxy_has_egl_extension (dpy, ext), 0);
}
static EGLDisplay
@@ -303,18 +296,18 @@ static void
init_gl (GtkInspectorGeneral *gen)
{
#ifdef GDK_WINDOWING_X11
if (GDK_IS_X11_DISPLAY (gen->display))
if (GDK_IS_X11_DISPLAY (gen->priv->display))
{
Display *dpy = GDK_DISPLAY_XDISPLAY (gen->display);
Display *dpy = GDK_DISPLAY_XDISPLAY (gen->priv->display);
int error_base, event_base;
gchar *version;
if (!glXQueryExtension (dpy, &error_base, &event_base))
return;
version = g_strconcat ("GLX ", glXGetClientString (dpy, GLX_VERSION), NULL);
gtk_label_set_text (GTK_LABEL (gen->gl_version), version);
gtk_label_set_text (GTK_LABEL (gen->priv->gl_version), version);
g_free (version);
gtk_label_set_text (GTK_LABEL (gen->gl_vendor), glXGetClientString (dpy, GLX_VENDOR));
gtk_label_set_text (GTK_LABEL (gen->priv->gl_vendor), glXGetClientString (dpy, GLX_VENDOR));
append_glx_extension_row (gen, dpy, "GLX_ARB_create_context_profile");
append_glx_extension_row (gen, dpy, "GLX_SGI_swap_control");
@@ -328,21 +321,21 @@ init_gl (GtkInspectorGeneral *gen)
else
#endif
#ifdef GDK_WINDOWING_WAYLAND
if (GDK_IS_WAYLAND_DISPLAY (gen->display))
if (GDK_IS_WAYLAND_DISPLAY (gen->priv->display))
{
EGLDisplay dpy;
EGLint major, minor;
gchar *version;
dpy = wayland_get_display (gdk_wayland_display_get_wl_display (gen->display));
dpy = wayland_get_display (gdk_wayland_display_get_wl_display (gen->priv->display));
if (!eglInitialize (dpy, &major, &minor))
return;
version = g_strconcat ("EGL ", eglQueryString (dpy, EGL_VERSION), NULL);
gtk_label_set_text (GTK_LABEL (gen->gl_version), version);
gtk_label_set_text (GTK_LABEL (gen->priv->gl_version), version);
g_free (version);
gtk_label_set_text (GTK_LABEL (gen->gl_vendor), eglQueryString (dpy, EGL_VENDOR));
gtk_label_set_text (GTK_LABEL (gen->priv->gl_vendor), eglQueryString (dpy, EGL_VENDOR));
append_egl_extension_row (gen, dpy, "EGL_KHR_create_context");
append_egl_extension_row (gen, dpy, "EGL_EXT_buffer_age");
@@ -352,8 +345,8 @@ init_gl (GtkInspectorGeneral *gen)
else
#endif
{
gtk_label_set_text (GTK_LABEL (gen->gl_version), C_("GL version", "None"));
gtk_label_set_text (GTK_LABEL (gen->gl_vendor), C_("GL vendor", "None"));
gtk_label_set_text (GTK_LABEL (gen->priv->gl_version), C_("GL version", "None"));
gtk_label_set_text (GTK_LABEL (gen->priv->gl_vendor), C_("GL vendor", "None"));
}
}
@@ -402,7 +395,7 @@ init_vulkan (GtkInspectorGeneral *gen)
GdkSurface *surface;
GdkVulkanContext *context;
surface = gdk_surface_new_toplevel (gen->display, 10, 10);
surface = gdk_surface_new_toplevel (gen->priv->display, 10, 10);
context = gdk_surface_create_vulkan_context (surface, NULL);
gdk_surface_destroy (surface);
@@ -427,26 +420,26 @@ init_vulkan (GtkInspectorGeneral *gen)
VK_VERSION_MINOR (props.driverVersion),
VK_VERSION_PATCH (props.driverVersion));
gtk_label_set_text (GTK_LABEL (gen->vk_device), device_name);
gtk_label_set_text (GTK_LABEL (gen->vk_api_version), api_version);
gtk_label_set_text (GTK_LABEL (gen->vk_driver_version), driver_version);
gtk_label_set_text (GTK_LABEL (gen->priv->vk_device), device_name);
gtk_label_set_text (GTK_LABEL (gen->priv->vk_api_version), api_version);
gtk_label_set_text (GTK_LABEL (gen->priv->vk_driver_version), driver_version);
g_free (device_name);
g_free (api_version);
g_free (driver_version);
add_check_row (gen, GTK_LIST_BOX (gen->vulkan_box), VK_KHR_SURFACE_EXTENSION_NAME, TRUE, 0);
add_check_row (gen, GTK_LIST_BOX (gen->priv->vulkan_box), VK_KHR_SURFACE_EXTENSION_NAME, TRUE, 0);
#ifdef GDK_WINDOWING_X11
if (GDK_IS_X11_DISPLAY (gen->display))
add_check_row (gen, GTK_LIST_BOX (gen->vulkan_box), "VK_KHR_xlib_surface", TRUE, 0);
if (GDK_IS_X11_DISPLAY (gen->priv->display))
add_check_row (gen, GTK_LIST_BOX (gen->priv->vulkan_box), "VK_KHR_xlib_surface", TRUE, 0);
#endif
#ifdef GDK_WINDOWING_WAYLAND
if (GDK_IS_WAYLAND_DISPLAY (gen->display))
add_check_row (gen, GTK_LIST_BOX (gen->vulkan_box), "VK_KHR_wayland_surface", TRUE, 0);
if (GDK_IS_WAYLAND_DISPLAY (gen->priv->display))
add_check_row (gen, GTK_LIST_BOX (gen->priv->vulkan_box), "VK_KHR_wayland_surface", TRUE, 0);
#endif
add_check_row (gen, GTK_LIST_BOX (gen->vulkan_box), VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
add_check_row (gen, GTK_LIST_BOX (gen->priv->vulkan_box), VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
has_debug_extension (context), 0);
add_check_row (gen, GTK_LIST_BOX (gen->vulkan_box), "VK_LAYER_LUNARG_standard_validation",
add_check_row (gen, GTK_LIST_BOX (gen->priv->vulkan_box), "VK_LAYER_LUNARG_standard_validation",
has_validation_layer (context), 0);
g_object_unref (context);
@@ -454,9 +447,9 @@ init_vulkan (GtkInspectorGeneral *gen)
else
#endif
{
gtk_label_set_text (GTK_LABEL (gen->vk_device), C_("Vulkan device", "None"));
gtk_label_set_text (GTK_LABEL (gen->vk_api_version), C_("Vulkan version", "None"));
gtk_label_set_text (GTK_LABEL (gen->vk_driver_version), C_("Vulkan version", "None"));
gtk_label_set_text (GTK_LABEL (gen->priv->vk_device), C_("Vulkan device", "None"));
gtk_label_set_text (GTK_LABEL (gen->priv->vk_api_version), C_("Vulkan version", "None"));
gtk_label_set_text (GTK_LABEL (gen->priv->vk_driver_version), C_("Vulkan version", "None"));
}
}
@@ -495,14 +488,14 @@ set_path_label (GtkWidget *w,
static void
init_env (GtkInspectorGeneral *gen)
{
set_monospace_font (gen->prefix);
gtk_label_set_text (GTK_LABEL (gen->prefix), _gtk_get_data_prefix ());
set_path_label (gen->xdg_data_home, "XDG_DATA_HOME");
set_path_label (gen->xdg_data_dirs, "XDG_DATA_DIRS");
set_path_label (gen->gtk_path, "GTK_PATH");
set_path_label (gen->gtk_exe_prefix, "GTK_EXE_PREFIX");
set_path_label (gen->gtk_data_prefix, "GTK_DATA_PREFIX");
set_path_label (gen->gsettings_schema_dir, "GSETTINGS_SCHEMA_DIR");
set_monospace_font (gen->priv->prefix);
gtk_label_set_text (GTK_LABEL (gen->priv->prefix), _gtk_get_data_prefix ());
set_path_label (gen->priv->xdg_data_home, "XDG_DATA_HOME");
set_path_label (gen->priv->xdg_data_dirs, "XDG_DATA_DIRS");
set_path_label (gen->priv->gtk_path, "GTK_PATH");
set_path_label (gen->priv->gtk_exe_prefix, "GTK_EXE_PREFIX");
set_path_label (gen->priv->gtk_data_prefix, "GTK_DATA_PREFIX");
set_path_label (gen->priv->gsettings_schema_dir, "GSETTINGS_SCHEMA_DIR");
}
static const char *
@@ -527,8 +520,8 @@ populate_display (GdkDisplay *display, GtkInspectorGeneral *gen)
GtkWidget *child;
GtkListBox *list;
gtk_widget_show (gen->display_composited);
list = GTK_LIST_BOX (gen->display_box);
gtk_widget_show (gen->priv->display_composited);
list = GTK_LIST_BOX (gen->priv->display_box);
children = NULL;
for (child = gtk_widget_get_first_child (GTK_WIDGET (list));
child != NULL;
@@ -540,20 +533,20 @@ populate_display (GdkDisplay *display, GtkInspectorGeneral *gen)
for (l = children; l; l = l->next)
{
child = l->data;
if (gtk_widget_is_ancestor (gen->display_name, child) ||
gtk_widget_is_ancestor (gen->display_rgba, child) ||
gtk_widget_is_ancestor (gen->display_composited, child))
if (gtk_widget_is_ancestor (gen->priv->display_name, child) ||
gtk_widget_is_ancestor (gen->priv->display_rgba, child) ||
gtk_widget_is_ancestor (gen->priv->display_composited, child))
continue;
gtk_list_box_remove (list, child);
}
g_list_free (children);
gtk_label_set_label (GTK_LABEL (gen->display_name), gdk_display_get_name (display));
gtk_label_set_label (GTK_LABEL (gen->priv->display_name), gdk_display_get_name (display));
gtk_widget_set_visible (gen->display_rgba,
gtk_widget_set_visible (gen->priv->display_rgba,
gdk_display_is_rgba (display));
gtk_widget_set_visible (gen->display_composited,
gtk_widget_set_visible (gen->priv->display_composited,
gdk_display_is_composited (display));
}
@@ -631,13 +624,13 @@ populate_display_notify_cb (GdkDisplay *display,
static void
init_display (GtkInspectorGeneral *gen)
{
g_signal_connect (gen->display, "notify", G_CALLBACK (populate_display_notify_cb), gen);
gtk_list_box_bind_model (GTK_LIST_BOX (gen->monitor_box),
gdk_display_get_monitors (gen->display),
g_signal_connect (gen->priv->display, "notify", G_CALLBACK (populate_display_notify_cb), gen);
gtk_list_box_bind_model (GTK_LIST_BOX (gen->priv->monitor_box),
gdk_display_get_monitors (gen->priv->display),
populate_monitor,
gen, NULL);
populate_display (gen->display, gen);
populate_display (gen->priv->display, gen);
}
static void
@@ -658,7 +651,7 @@ init_pango (GtkInspectorGeneral *gen)
else
name = type;
gtk_label_set_label (GTK_LABEL (gen->pango_fontmap), name);
gtk_label_set_label (GTK_LABEL (gen->priv->pango_fontmap), name);
}
static void
@@ -669,7 +662,7 @@ init_media (GtkInspectorGeneral *gen)
e = gtk_media_file_get_extension ();
name = g_io_extension_get_name (e);
gtk_label_set_label (GTK_LABEL (gen->media_backend), name);
gtk_label_set_label (GTK_LABEL (gen->priv->media_backend), name);
}
static void populate_seats (GtkInspectorGeneral *gen);
@@ -711,7 +704,7 @@ add_device (GtkInspectorGeneral *gen,
name = gdk_device_get_name (device);
value = source_name[gdk_device_get_source (device)];
add_label_row (gen, GTK_LIST_BOX (gen->device_box), name, value, 10);
add_label_row (gen, GTK_LIST_BOX (gen->priv->device_box), name, value, 10);
str = g_string_new ("");
@@ -727,7 +720,7 @@ add_device (GtkInspectorGeneral *gen,
}
if (str->len > 0)
add_label_row (gen, GTK_LIST_BOX (gen->device_box), "Axes", str->str, 20);
add_label_row (gen, GTK_LIST_BOX (gen->priv->device_box), "Axes", str->str, 20);
g_string_free (str, TRUE);
@@ -735,7 +728,7 @@ add_device (GtkInspectorGeneral *gen,
if (n_touches > 0)
{
text = g_strdup_printf ("%d", n_touches);
add_label_row (gen, GTK_LIST_BOX (gen->device_box), "Touches", text, 20);
add_label_row (gen, GTK_LIST_BOX (gen->priv->device_box), "Touches", text, 20);
g_free (text);
}
}
@@ -791,7 +784,7 @@ add_seat (GtkInspectorGeneral *gen,
text = g_strdup_printf ("Seat %d", num);
caps = get_seat_capabilities (seat);
add_label_row (gen, GTK_LIST_BOX (gen->device_box), text, caps, 0);
add_label_row (gen, GTK_LIST_BOX (gen->priv->device_box), text, caps, 0);
g_free (text);
g_free (caps);
@@ -810,10 +803,10 @@ populate_seats (GtkInspectorGeneral *gen)
GList *list, *l;
int i;
while ((child = gtk_widget_get_first_child (gen->device_box)))
gtk_list_box_remove (GTK_LIST_BOX (gen->device_box), child);
while ((child = gtk_widget_get_first_child (gen->priv->device_box)))
gtk_list_box_remove (GTK_LIST_BOX (gen->priv->device_box), child);
list = gdk_display_list_seats (gen->display);
list = gdk_display_list_seats (gen->priv->display);
for (l = list, i = 0; l; l = l->next, i++)
add_seat (gen, GDK_SEAT (l->data), i);
@@ -824,8 +817,8 @@ populate_seats (GtkInspectorGeneral *gen)
static void
init_device (GtkInspectorGeneral *gen)
{
g_signal_connect_swapped (gen->display, "seat-added", G_CALLBACK (populate_seats), gen);
g_signal_connect_swapped (gen->display, "seat-removed", G_CALLBACK (populate_seats), gen);
g_signal_connect_swapped (gen->priv->display, "seat-added", G_CALLBACK (populate_seats), gen);
g_signal_connect_swapped (gen->priv->display, "seat-removed", G_CALLBACK (populate_seats), gen);
populate_seats (gen);
}
@@ -833,6 +826,7 @@ init_device (GtkInspectorGeneral *gen)
static void
gtk_inspector_general_init (GtkInspectorGeneral *gen)
{
gen->priv = gtk_inspector_general_get_instance_private (gen);
gtk_widget_init_template (GTK_WIDGET (gen));
}
@@ -841,30 +835,30 @@ keynav_failed (GtkWidget *widget, GtkDirectionType direction, GtkInspectorGenera
{
GtkWidget *next;
if (direction == GTK_DIR_DOWN && widget == gen->version_box)
next = gen->env_box;
else if (direction == GTK_DIR_DOWN && widget == gen->env_box)
next = gen->display_box;
else if (direction == GTK_DIR_DOWN && widget == gen->display_box)
next = gen->monitor_box;
else if (direction == GTK_DIR_DOWN && widget == gen->monitor_box)
next = gen->gl_box;
else if (direction == GTK_DIR_DOWN && widget == gen->gl_box)
next = gen->vulkan_box;
else if (direction == GTK_DIR_DOWN && widget == gen->vulkan_box)
next = gen->device_box;
else if (direction == GTK_DIR_UP && widget == gen->device_box)
next = gen->vulkan_box;
else if (direction == GTK_DIR_UP && widget == gen->vulkan_box)
next = gen->gl_box;
else if (direction == GTK_DIR_UP && widget == gen->gl_box)
next = gen->monitor_box;
else if (direction == GTK_DIR_UP && widget == gen->monitor_box)
next = gen->display_box;
else if (direction == GTK_DIR_UP && widget == gen->display_box)
next = gen->env_box;
else if (direction == GTK_DIR_UP && widget == gen->env_box)
next = gen->version_box;
if (direction == GTK_DIR_DOWN && widget == gen->priv->version_box)
next = gen->priv->env_box;
else if (direction == GTK_DIR_DOWN && widget == gen->priv->env_box)
next = gen->priv->display_box;
else if (direction == GTK_DIR_DOWN && widget == gen->priv->display_box)
next = gen->priv->monitor_box;
else if (direction == GTK_DIR_DOWN && widget == gen->priv->monitor_box)
next = gen->priv->gl_box;
else if (direction == GTK_DIR_DOWN && widget == gen->priv->gl_box)
next = gen->priv->vulkan_box;
else if (direction == GTK_DIR_DOWN && widget == gen->priv->vulkan_box)
next = gen->priv->device_box;
else if (direction == GTK_DIR_UP && widget == gen->priv->device_box)
next = gen->priv->vulkan_box;
else if (direction == GTK_DIR_UP && widget == gen->priv->vulkan_box)
next = gen->priv->gl_box;
else if (direction == GTK_DIR_UP && widget == gen->priv->gl_box)
next = gen->priv->monitor_box;
else if (direction == GTK_DIR_UP && widget == gen->priv->monitor_box)
next = gen->priv->display_box;
else if (direction == GTK_DIR_UP && widget == gen->priv->display_box)
next = gen->priv->env_box;
else if (direction == GTK_DIR_UP && widget == gen->priv->env_box)
next = gen->priv->version_box;
else
next = NULL;
@@ -884,13 +878,13 @@ gtk_inspector_general_constructed (GObject *object)
G_OBJECT_CLASS (gtk_inspector_general_parent_class)->constructed (object);
g_signal_connect (gen->version_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->env_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->display_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->monitor_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->gl_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->vulkan_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->device_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->priv->version_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->priv->env_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->priv->display_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->priv->monitor_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->priv->gl_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->priv->vulkan_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->priv->device_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
}
static void
@@ -898,7 +892,7 @@ gtk_inspector_general_dispose (GObject *object)
{
GtkInspectorGeneral *gen = GTK_INSPECTOR_GENERAL (object);
g_clear_pointer (&gen->swin, gtk_widget_unparent);
g_clear_pointer (&gen->priv->swin, gtk_widget_unparent);
G_OBJECT_CLASS (gtk_inspector_general_parent_class)->dispose (object);
}
@@ -913,36 +907,36 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass)
object_class->dispose = gtk_inspector_general_dispose;
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/general.ui");
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, swin);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, version_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, env_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, display_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, monitor_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vulkan_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gtk_version);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gdk_backend);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gsk_renderer);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, pango_fontmap);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, media_backend);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_version);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_vendor);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vk_device);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vk_api_version);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vk_driver_version);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, prefix);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, xdg_data_home);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, xdg_data_dirs);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gtk_path);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gtk_exe_prefix);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gtk_data_prefix);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gsettings_schema_dir);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, labels);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, display_name);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, display_composited);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, display_rgba);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, device_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, swin);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, version_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, env_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, display_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, monitor_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gl_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, vulkan_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gtk_version);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gdk_backend);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gsk_renderer);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, pango_fontmap);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, media_backend);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gl_version);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gl_vendor);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, vk_device);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, vk_api_version);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, vk_driver_version);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, prefix);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, xdg_data_home);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, xdg_data_dirs);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gtk_path);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gtk_exe_prefix);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gtk_data_prefix);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gsettings_schema_dir);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, labels);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, display_name);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, display_composited);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, display_rgba);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, device_box);
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
}
@@ -951,7 +945,7 @@ void
gtk_inspector_general_set_display (GtkInspectorGeneral *gen,
GdkDisplay *display)
{
gen->display = display;
gen->priv->display = display;
init_version (gen);
init_env (gen);
+18 -2
View File
@@ -18,13 +18,29 @@
#ifndef _GTK_INSPECTOR_GENERAL_H_
#define _GTK_INSPECTOR_GENERAL_H_
#include <gtk/gtkwidget.h>
#include <gtk/gtkscrolledwindow.h>
#define GTK_TYPE_INSPECTOR_GENERAL (gtk_inspector_general_get_type())
#define GTK_INSPECTOR_GENERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_GENERAL, GtkInspectorGeneral))
#define GTK_INSPECTOR_GENERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_INSPECTOR_GENERAL, GtkInspectorGeneralClass))
#define GTK_INSPECTOR_IS_GENERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INSPECTOR_GENERAL))
#define GTK_INSPECTOR_IS_GENERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_INSPECTOR_GENERAL))
#define GTK_INSPECTOR_GENERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_INSPECTOR_GENERAL, GtkInspectorGeneralClass))
typedef struct _GtkInspectorGeneral GtkInspectorGeneral;
typedef struct _GtkInspectorGeneralPrivate GtkInspectorGeneralPrivate;
typedef struct _GtkInspectorGeneral
{
GtkWidget parent;
GtkInspectorGeneralPrivate *priv;
} GtkInspectorGeneral;
typedef struct _GtkInspectorGeneralClass
{
GtkWidgetClass parent_class;
} GtkInspectorGeneralClass;
G_BEGIN_DECLS
+5 -7
View File
@@ -86,7 +86,7 @@ gtk_inspector_list_data_set_object (GtkInspectorListData *sl,
sl->object = G_LIST_MODEL (object);
selection = gtk_no_selection_new (sl->object);
gtk_column_view_set_model (sl->view, G_LIST_MODEL (selection));
gtk_column_view_set_model (sl->view, GTK_SELECTION_MODEL (selection));
g_object_unref (selection);
}
@@ -187,15 +187,13 @@ unbind_props (GtkSignalListItemFactory *factory,
}
static void
dispose (GObject *object)
finalize (GObject *object)
{
GtkInspectorListData *sl = GTK_INSPECTOR_LIST_DATA (object);
GtkWidget *child;
while ((child = gtk_widget_get_first_child (GTK_WIDGET (sl))))
gtk_widget_unparent (child);
gtk_inspector_list_data_set_object (sl, NULL);
G_OBJECT_CLASS (gtk_inspector_list_data_parent_class)->dispose (object);
G_OBJECT_CLASS (gtk_inspector_list_data_parent_class)->finalize (object);
}
static void
@@ -204,7 +202,7 @@ gtk_inspector_list_data_class_init (GtkInspectorListDataClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->dispose = dispose;
object_class->finalize = finalize;
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/list-data.ui");
gtk_widget_class_bind_template_child (widget_class, GtkInspectorListData, view);
+67 -79
View File
@@ -40,13 +40,10 @@
#include "gtknative.h"
#include "gskdebugprivate.h"
#include "gskrendererprivate.h"
#include "gtkboxlayout.h"
struct _GtkInspectorLogs
struct _GtkInspectorLogsPrivate
{
GtkWidget parent;
GtkWidget *events;
GtkWidget *misc;
GtkWidget *dnd;
@@ -80,28 +77,21 @@ struct _GtkInspectorLogs
GdkDisplay *display;
};
typedef struct _GtkInspectorLogsClass
{
GtkWidgetClass parent;
} GtkInspectorLogsClass;
G_DEFINE_TYPE (GtkInspectorLogs, gtk_inspector_logs, GTK_TYPE_WIDGET)
G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorLogs, gtk_inspector_logs, GTK_TYPE_BOX)
static void
gtk_inspector_logs_init (GtkInspectorLogs *logs)
{
logs->priv = gtk_inspector_logs_get_instance_private (logs);
gtk_widget_init_template (GTK_WIDGET (logs));
}
static void
dispose (GObject *object)
finalize (GObject *object)
{
GtkWidget *child;
//GtkInspectorLogs *logs = GTK_INSPECTOR_LOGS (object);
while ((child = gtk_widget_get_first_child (GTK_WIDGET (object))))
gtk_widget_unparent (child);
G_OBJECT_CLASS (gtk_inspector_logs_parent_class)->dispose (object);
G_OBJECT_CLASS (gtk_inspector_logs_parent_class)->finalize (object);
}
static void
@@ -122,28 +112,28 @@ flag_toggled (GtkWidget *button,
guint flags;
GList *toplevels, *l;
flags = gdk_display_get_debug_flags (logs->display);
update_flag (logs->events, &flags, GDK_DEBUG_EVENTS);
update_flag (logs->misc, &flags, GDK_DEBUG_MISC);
update_flag (logs->dnd, &flags, GDK_DEBUG_DND);
update_flag (logs->input, &flags, GDK_DEBUG_INPUT);
update_flag (logs->eventloop, &flags, GDK_DEBUG_EVENTLOOP);
update_flag (logs->frames, &flags, GDK_DEBUG_FRAMES);
update_flag (logs->settings, &flags, GDK_DEBUG_SETTINGS);
update_flag (logs->opengl, &flags, GDK_DEBUG_OPENGL);
update_flag (logs->vulkan, &flags, GDK_DEBUG_VULKAN);
update_flag (logs->selection, &flags, GDK_DEBUG_SELECTION);
update_flag (logs->clipboard, &flags, GDK_DEBUG_CLIPBOARD);
gdk_display_set_debug_flags (logs->display, flags);
flags = gdk_display_get_debug_flags (logs->priv->display);
update_flag (logs->priv->events, &flags, GDK_DEBUG_EVENTS);
update_flag (logs->priv->misc, &flags, GDK_DEBUG_MISC);
update_flag (logs->priv->dnd, &flags, GDK_DEBUG_DND);
update_flag (logs->priv->input, &flags, GDK_DEBUG_INPUT);
update_flag (logs->priv->eventloop, &flags, GDK_DEBUG_EVENTLOOP);
update_flag (logs->priv->frames, &flags, GDK_DEBUG_FRAMES);
update_flag (logs->priv->settings, &flags, GDK_DEBUG_SETTINGS);
update_flag (logs->priv->opengl, &flags, GDK_DEBUG_OPENGL);
update_flag (logs->priv->vulkan, &flags, GDK_DEBUG_VULKAN);
update_flag (logs->priv->selection, &flags, GDK_DEBUG_SELECTION);
update_flag (logs->priv->clipboard, &flags, GDK_DEBUG_CLIPBOARD);
gdk_display_set_debug_flags (logs->priv->display, flags);
flags = gsk_get_debug_flags ();
update_flag (logs->renderer, &flags, GSK_DEBUG_RENDERER);
update_flag (logs->cairo, &flags, GSK_DEBUG_CAIRO);
update_flag (logs->opengl_gsk, &flags, GSK_DEBUG_OPENGL);
update_flag (logs->vulkan_gsk, &flags, GSK_DEBUG_VULKAN);
update_flag (logs->shaders, &flags, GSK_DEBUG_SHADERS);
update_flag (logs->surface, &flags, GSK_DEBUG_SURFACE);
update_flag (logs->glyphcache, &flags, GSK_DEBUG_GLYPH_CACHE);
update_flag (logs->priv->renderer, &flags, GSK_DEBUG_RENDERER);
update_flag (logs->priv->cairo, &flags, GSK_DEBUG_CAIRO);
update_flag (logs->priv->opengl_gsk, &flags, GSK_DEBUG_OPENGL);
update_flag (logs->priv->vulkan_gsk, &flags, GSK_DEBUG_VULKAN);
update_flag (logs->priv->shaders, &flags, GSK_DEBUG_SHADERS);
update_flag (logs->priv->surface, &flags, GSK_DEBUG_SURFACE);
update_flag (logs->priv->glyphcache, &flags, GSK_DEBUG_GLYPH_CACHE);
gsk_set_debug_flags (flags);
toplevels = gtk_window_list_toplevels ();
@@ -151,7 +141,7 @@ flag_toggled (GtkWidget *button,
{
GtkWidget *toplevel = l->data;
if (gtk_root_get_display (GTK_ROOT (toplevel)) == logs->display)
if (gtk_root_get_display (GTK_ROOT (toplevel)) == logs->priv->display)
{
GskRenderer *renderer = gtk_native_get_renderer (GTK_NATIVE (toplevel));
if (renderer)
@@ -160,17 +150,17 @@ flag_toggled (GtkWidget *button,
}
g_list_free (toplevels);
flags = gtk_get_display_debug_flags (logs->display);
update_flag (logs->actions, &flags, GTK_DEBUG_ACTIONS);
update_flag (logs->builder, &flags, GTK_DEBUG_BUILDER);
update_flag (logs->sizes, &flags, GTK_DEBUG_SIZE_REQUEST);
update_flag (logs->icons, &flags, GTK_DEBUG_ICONTHEME);
update_flag (logs->keybindings, &flags, GTK_DEBUG_KEYBINDINGS);
update_flag (logs->modules, &flags, GTK_DEBUG_MODULES);
update_flag (logs->printing, &flags, GTK_DEBUG_PRINTING);
update_flag (logs->tree, &flags, GTK_DEBUG_TREE);
update_flag (logs->text, &flags, GTK_DEBUG_TEXT);
gtk_set_display_debug_flags (logs->display, flags);
flags = gtk_get_display_debug_flags (logs->priv->display);
update_flag (logs->priv->actions, &flags, GTK_DEBUG_ACTIONS);
update_flag (logs->priv->builder, &flags, GTK_DEBUG_BUILDER);
update_flag (logs->priv->sizes, &flags, GTK_DEBUG_SIZE_REQUEST);
update_flag (logs->priv->icons, &flags, GTK_DEBUG_ICONTHEME);
update_flag (logs->priv->keybindings, &flags, GTK_DEBUG_KEYBINDINGS);
update_flag (logs->priv->modules, &flags, GTK_DEBUG_MODULES);
update_flag (logs->priv->printing, &flags, GTK_DEBUG_PRINTING);
update_flag (logs->priv->tree, &flags, GTK_DEBUG_TREE);
update_flag (logs->priv->text, &flags, GTK_DEBUG_TEXT);
gtk_set_display_debug_flags (logs->priv->display, flags);
}
static void
@@ -179,48 +169,46 @@ gtk_inspector_logs_class_init (GtkInspectorLogsClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->dispose = dispose;
object_class->finalize = finalize;
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/logs.ui");
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, events);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, misc);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, dnd);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, input);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, eventloop);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, frames);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, settings);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, opengl);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, vulkan);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, selection);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, clipboard);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, events);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, misc);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, dnd);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, input);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, eventloop);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, frames);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, settings);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, opengl);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, vulkan);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, selection);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, clipboard);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, renderer);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, cairo);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, opengl_gsk);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, vulkan_gsk);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, shaders);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, surface);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, glyphcache);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, renderer);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, cairo);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, opengl_gsk);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, vulkan_gsk);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, shaders);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, surface);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, glyphcache);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, actions);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, builder);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, sizes);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, icons);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, keybindings);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, modules);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, printing);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, tree);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorLogs, text);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, actions);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, builder);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, sizes);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, icons);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, keybindings);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, modules);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, printing);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, tree);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, text);
gtk_widget_class_bind_template_callback (widget_class, flag_toggled);
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT);
}
void
gtk_inspector_logs_set_display (GtkInspectorLogs *logs,
GdkDisplay *display)
{
logs->display = display;
logs->priv->display = display;
}
// vim: set et sw=2 ts=2:
+16 -2
View File
@@ -23,14 +23,28 @@
#ifndef _GTK_INSPECTOR_LOGS_H_
#define _GTK_INSPECTOR_LOGS_H_
#include <gtk/gtkwidget.h>
#include <gtk/gtkbox.h>
#define GTK_TYPE_INSPECTOR_LOGS (gtk_inspector_logs_get_type())
#define GTK_INSPECTOR_LOGS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_LOGS, GtkInspectorLogs))
#define GTK_INSPECTOR_LOGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_INSPECTOR_LOGS, GtkInspectorLogsClass))
#define GTK_INSPECTOR_IS_LOGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INSPECTOR_LOGS))
#define GTK_INSPECTOR_IS_LOGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_INSPECTOR_LOGS))
#define GTK_INSPECTOR_LOGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_INSPECTOR_LOGS, GtkInspectorLogsClass))
typedef struct _GtkInspectorLogs GtkInspectorLogs;
typedef struct _GtkInspectorLogsPrivate GtkInspectorLogsPrivate;
typedef struct _GtkInspectorLogs
{
GtkBox parent;
GtkInspectorLogsPrivate *priv;
} GtkInspectorLogs;
typedef struct _GtkInspectorLogsClass
{
GtkBoxClass parent;
} GtkInspectorLogsClass;
G_BEGIN_DECLS
+1 -1
View File
@@ -1,5 +1,5 @@
<interface domain="gtk40">
<template class="GtkInspectorLogs" parent="GtkWidget">
<template class="GtkInspectorLogs" parent="GtkBox">
<child>
<object class="GtkBox">
<property name="margin-start">20</property>
+157 -164
View File
@@ -33,10 +33,7 @@
#include "gtkbinlayout.h"
struct _GtkInspectorMiscInfo
{
GtkWidget parent;
struct _GtkInspectorMiscInfoPrivate {
GObject *object;
GtkWidget *swin;
@@ -91,12 +88,7 @@ struct _GtkInspectorMiscInfo
gint64 last_frame;
};
typedef struct _GtkInspectorMiscInfoClass
{
GtkWidgetClass parent_class;
} GtkInspectorMiscInfoClass;
G_DEFINE_TYPE (GtkInspectorMiscInfo, gtk_inspector_misc_info, GTK_TYPE_WIDGET)
G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorMiscInfo, gtk_inspector_misc_info, GTK_TYPE_WIDGET)
static gchar *
format_state_flags (GtkStateFlags state)
@@ -133,7 +125,7 @@ state_flags_changed (GtkWidget *w, GtkStateFlags old_flags, GtkInspectorMiscInfo
gchar *s;
s = format_state_flags (gtk_widget_get_state_flags (w));
gtk_label_set_label (GTK_LABEL (sl->state), s);
gtk_label_set_label (GTK_LABEL (sl->priv->state), s);
g_free (s);
}
@@ -151,16 +143,16 @@ update_allocation (GtkWidget *w,
alloc.width, alloc.height,
alloc.x, alloc.y);
gtk_label_set_label (GTK_LABEL (sl->allocated_size), size_label);
gtk_label_set_label (GTK_LABEL (sl->priv->allocated_size), size_label);
g_free (size_label);
size_label = g_strdup_printf ("%d", gtk_widget_get_allocated_baseline (w));
gtk_label_set_label (GTK_LABEL (sl->baseline), size_label);
gtk_label_set_label (GTK_LABEL (sl->priv->baseline), size_label);
g_free (size_label);
class = G_ENUM_CLASS (g_type_class_ref (GTK_TYPE_SIZE_REQUEST_MODE));
value = g_enum_get_value (class, gtk_widget_get_request_mode (w));
gtk_label_set_label (GTK_LABEL (sl->request_mode), value->value_nick);
gtk_label_set_label (GTK_LABEL (sl->priv->request_mode), value->value_nick);
g_type_class_unref (class);
}
@@ -171,7 +163,7 @@ disconnect_each_other (gpointer still_alive,
if (GTK_INSPECTOR_IS_MISC_INFO (still_alive))
{
GtkInspectorMiscInfo *self = GTK_INSPECTOR_MISC_INFO (still_alive);
self->object = NULL;
self->priv->object = NULL;
}
g_signal_handlers_disconnect_matched (still_alive, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, for_science);
@@ -199,7 +191,7 @@ show_surface (GtkWidget *button, GtkInspectorMiscInfo *sl)
iw = GTK_INSPECTOR_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (sl), GTK_TYPE_INSPECTOR_WINDOW));
surface = (GObject *)gtk_native_get_surface (GTK_NATIVE (sl->object));
surface = (GObject *)gtk_native_get_surface (GTK_NATIVE (sl->priv->object));
if (surface)
gtk_inspector_window_push_object (iw, surface, CHILD_KIND_OTHER, 0);
}
@@ -212,7 +204,7 @@ show_renderer (GtkWidget *button, GtkInspectorMiscInfo *sl)
iw = GTK_INSPECTOR_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (sl), GTK_TYPE_INSPECTOR_WINDOW));
renderer = (GObject *)gtk_native_get_renderer (GTK_NATIVE (sl->object));
renderer = (GObject *)gtk_native_get_renderer (GTK_NATIVE (sl->priv->object));
if (renderer)
gtk_inspector_window_push_object (iw, renderer, CHILD_KIND_OTHER, 0);
}
@@ -225,7 +217,7 @@ show_frame_clock (GtkWidget *button, GtkInspectorMiscInfo *sl)
iw = GTK_INSPECTOR_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (sl), GTK_TYPE_INSPECTOR_WINDOW));
clock = (GObject *)gtk_widget_get_frame_clock (GTK_WIDGET (sl->object));
clock = (GObject *)gtk_widget_get_frame_clock (GTK_WIDGET (sl->priv->object));
if (clock)
gtk_inspector_window_push_object (iw, clock, CHILD_KIND_OTHER, 0);
}
@@ -233,72 +225,72 @@ show_frame_clock (GtkWidget *button, GtkInspectorMiscInfo *sl)
static void
update_surface (GtkInspectorMiscInfo *sl)
{
if (GTK_IS_NATIVE (sl->object))
if (GTK_IS_NATIVE (sl->priv->object))
{
GObject *obj;
char *tmp;
gtk_widget_show (sl->surface_row);
gtk_widget_show (sl->priv->surface_row);
obj = (GObject *)gtk_native_get_surface (GTK_NATIVE (sl->object));
obj = (GObject *)gtk_native_get_surface (GTK_NATIVE (sl->priv->object));
tmp = g_strdup_printf ("%p", obj);
gtk_label_set_label (GTK_LABEL (sl->surface), tmp);
gtk_label_set_label (GTK_LABEL (sl->priv->surface), tmp);
g_free (tmp);
}
else
{
gtk_widget_hide (sl->surface_row);
gtk_widget_hide (sl->priv->surface_row);
}
}
static void
update_renderer (GtkInspectorMiscInfo *sl)
{
if (GTK_IS_NATIVE (sl->object))
if (GTK_IS_NATIVE (sl->priv->object))
{
GObject *obj;
char *tmp;
gtk_widget_show (sl->renderer_row);
gtk_widget_show (sl->priv->renderer_row);
obj = (GObject *)gtk_native_get_surface (GTK_NATIVE (sl->object));
obj = (GObject *)gtk_native_get_surface (GTK_NATIVE (sl->priv->object));
tmp = g_strdup_printf ("%p", obj);
gtk_label_set_label (GTK_LABEL (sl->renderer), tmp);
gtk_label_set_label (GTK_LABEL (sl->priv->renderer), tmp);
g_free (tmp);
}
else
{
gtk_widget_hide (sl->renderer_row);
gtk_widget_hide (sl->priv->renderer_row);
}
}
static void
update_frame_clock (GtkInspectorMiscInfo *sl)
{
if (GTK_IS_ROOT (sl->object))
if (GTK_IS_ROOT (sl->priv->object))
{
GObject *clock;
gtk_widget_show (sl->frame_clock_row);
gtk_widget_show (sl->priv->frame_clock_row);
clock = (GObject *)gtk_widget_get_frame_clock (GTK_WIDGET (sl->object));
clock = (GObject *)gtk_widget_get_frame_clock (GTK_WIDGET (sl->priv->object));
if (clock)
{
gchar *tmp;
tmp = g_strdup_printf ("%p", clock);
gtk_label_set_label (GTK_LABEL (sl->frame_clock), tmp);
gtk_label_set_label (GTK_LABEL (sl->priv->frame_clock), tmp);
g_free (tmp);
gtk_widget_set_sensitive (sl->frame_clock_button, TRUE);
gtk_widget_set_sensitive (sl->priv->frame_clock_button, TRUE);
}
else
{
gtk_label_set_label (GTK_LABEL (sl->frame_clock), "NULL");
gtk_widget_set_sensitive (sl->frame_clock_button, FALSE);
gtk_label_set_label (GTK_LABEL (sl->priv->frame_clock), "NULL");
gtk_widget_set_sensitive (sl->priv->frame_clock_button, FALSE);
}
}
else
{
gtk_widget_hide (sl->frame_clock_row);
gtk_widget_hide (sl->priv->frame_clock_row);
}
}
@@ -309,34 +301,34 @@ update_info (gpointer data)
gchar *tmp;
GType gtype;
tmp = g_strdup_printf ("%p", sl->object);
gtk_label_set_text (GTK_LABEL (sl->address), tmp);
tmp = g_strdup_printf ("%p", sl->priv->object);
gtk_label_set_text (GTK_LABEL (sl->priv->address), tmp);
g_free (tmp);
gtype = G_TYPE_FROM_INSTANCE (sl->object);
gtype = G_TYPE_FROM_INSTANCE (sl->priv->object);
gtk_menu_button_set_label (GTK_MENU_BUTTON (sl->type), g_type_name (gtype));
gtk_inspector_type_popover_set_gtype (GTK_INSPECTOR_TYPE_POPOVER (sl->type_popover),
gtk_menu_button_set_label (GTK_MENU_BUTTON (sl->priv->type), g_type_name (gtype));
gtk_inspector_type_popover_set_gtype (GTK_INSPECTOR_TYPE_POPOVER (sl->priv->type_popover),
gtype);
if (G_IS_OBJECT (sl->object))
if (G_IS_OBJECT (sl->priv->object))
{
tmp = g_strdup_printf ("%d", sl->object->ref_count);
gtk_label_set_text (GTK_LABEL (sl->refcount), tmp);
tmp = g_strdup_printf ("%d", sl->priv->object->ref_count);
gtk_label_set_text (GTK_LABEL (sl->priv->refcount), tmp);
g_free (tmp);
}
if (GTK_IS_WIDGET (sl->object))
if (GTK_IS_WIDGET (sl->priv->object))
{
GtkWidget *child;
AtkObject *accessible;
AtkRole role;
GList *list, *l;
while ((child = gtk_widget_get_first_child (sl->mnemonic_label)))
gtk_box_remove (GTK_BOX (sl->mnemonic_label), child);
while ((child = gtk_widget_get_first_child (sl->priv->mnemonic_label)))
gtk_box_remove (GTK_BOX (sl->priv->mnemonic_label), child);
list = gtk_widget_list_mnemonic_labels (GTK_WIDGET (sl->object));
list = gtk_widget_list_mnemonic_labels (GTK_WIDGET (sl->priv->object));
for (l = list; l; l = l->next)
{
GtkWidget *button;
@@ -345,36 +337,36 @@ update_info (gpointer data)
button = gtk_button_new_with_label (tmp);
g_free (tmp);
gtk_widget_show (button);
gtk_box_append (GTK_BOX (sl->mnemonic_label), button);
gtk_box_append (GTK_BOX (sl->priv->mnemonic_label), button);
g_object_set_data (G_OBJECT (button), "mnemonic-label", l->data);
g_signal_connect (button, "clicked", G_CALLBACK (show_mnemonic_label), sl);
}
g_list_free (list);
gtk_widget_set_visible (sl->tick_callback, gtk_widget_has_tick_callback (GTK_WIDGET (sl->object)));
gtk_widget_set_visible (sl->priv->tick_callback, gtk_widget_has_tick_callback (GTK_WIDGET (sl->priv->object)));
accessible = ATK_OBJECT (gtk_widget_get_accessible (GTK_WIDGET (sl->object)));
accessible = ATK_OBJECT (gtk_widget_get_accessible (GTK_WIDGET (sl->priv->object)));
role = atk_object_get_role (accessible);
gtk_label_set_text (GTK_LABEL (sl->accessible_role), atk_role_get_name (role));
gtk_label_set_text (GTK_LABEL (sl->accessible_name), atk_object_get_name (accessible));
gtk_label_set_text (GTK_LABEL (sl->accessible_description), atk_object_get_description (accessible));
gtk_widget_set_visible (sl->mapped, gtk_widget_get_mapped (GTK_WIDGET (sl->object)));
gtk_widget_set_visible (sl->realized, gtk_widget_get_realized (GTK_WIDGET (sl->object)));
gtk_widget_set_visible (sl->is_toplevel, GTK_IS_ROOT (sl->object));
gtk_widget_set_visible (sl->child_visible, gtk_widget_get_child_visible (GTK_WIDGET (sl->object)));
gtk_label_set_text (GTK_LABEL (sl->priv->accessible_role), atk_role_get_name (role));
gtk_label_set_text (GTK_LABEL (sl->priv->accessible_name), atk_object_get_name (accessible));
gtk_label_set_text (GTK_LABEL (sl->priv->accessible_description), atk_object_get_description (accessible));
gtk_widget_set_visible (sl->priv->mapped, gtk_widget_get_mapped (GTK_WIDGET (sl->priv->object)));
gtk_widget_set_visible (sl->priv->realized, gtk_widget_get_realized (GTK_WIDGET (sl->priv->object)));
gtk_widget_set_visible (sl->priv->is_toplevel, GTK_IS_ROOT (sl->priv->object));
gtk_widget_set_visible (sl->priv->child_visible, gtk_widget_get_child_visible (GTK_WIDGET (sl->priv->object)));
}
update_surface (sl);
update_renderer (sl);
update_frame_clock (sl);
if (GTK_IS_BUILDABLE (sl->object))
if (GTK_IS_BUILDABLE (sl->priv->object))
{
gtk_label_set_text (GTK_LABEL (sl->buildable_id),
gtk_buildable_get_name (GTK_BUILDABLE (sl->object)));
gtk_label_set_text (GTK_LABEL (sl->priv->buildable_id),
gtk_buildable_get_name (GTK_BUILDABLE (sl->priv->object)));
}
if (GDK_IS_FRAME_CLOCK (sl->object))
if (GDK_IS_FRAME_CLOCK (sl->priv->object))
{
GdkFrameClock *clock;
gint64 frame;
@@ -384,31 +376,31 @@ update_info (gpointer data)
gint64 previous_frame_time;
GdkFrameTimings *previous_timings;
clock = GDK_FRAME_CLOCK (sl->object);
clock = GDK_FRAME_CLOCK (sl->priv->object);
frame = gdk_frame_clock_get_frame_counter (clock);
frame_time = gdk_frame_clock_get_frame_time (clock);
tmp = g_strdup_printf ("%"G_GINT64_FORMAT, frame);
gtk_label_set_label (GTK_LABEL (sl->framecount), tmp);
gtk_label_set_label (GTK_LABEL (sl->priv->framecount), tmp);
g_free (tmp);
history_start = gdk_frame_clock_get_history_start (clock);
history_len = frame - history_start;
if (history_len > 0 && sl->last_frame != frame)
if (history_len > 0 && sl->priv->last_frame != frame)
{
previous_timings = gdk_frame_clock_get_timings (clock, history_start);
previous_frame_time = gdk_frame_timings_get_frame_time (previous_timings);
tmp = g_strdup_printf ("%4.1f  s", (G_USEC_PER_SEC * history_len) / (double) (frame_time - previous_frame_time));
gtk_label_set_label (GTK_LABEL (sl->framerate), tmp);
gtk_label_set_label (GTK_LABEL (sl->priv->framerate), tmp);
g_free (tmp);
}
else
{
gtk_label_set_label (GTK_LABEL (sl->framerate), "");
gtk_label_set_label (GTK_LABEL (sl->priv->framerate), "");
}
sl->last_frame = frame;
sl->priv->last_frame = frame;
}
return G_SOURCE_CONTINUE;
@@ -418,79 +410,79 @@ void
gtk_inspector_misc_info_set_object (GtkInspectorMiscInfo *sl,
GObject *object)
{
if (sl->object)
if (sl->priv->object)
{
g_signal_handlers_disconnect_by_func (sl->object, state_flags_changed, sl);
disconnect_each_other (sl->object, G_OBJECT (sl));
disconnect_each_other (sl, sl->object);
sl->object = NULL;
g_signal_handlers_disconnect_by_func (sl->priv->object, state_flags_changed, sl);
disconnect_each_other (sl->priv->object, G_OBJECT (sl));
disconnect_each_other (sl, sl->priv->object);
sl->priv->object = NULL;
}
gtk_widget_show (GTK_WIDGET (sl));
sl->object = object;
sl->priv->object = object;
g_object_weak_ref (G_OBJECT (sl), disconnect_each_other, object);
g_object_weak_ref (object, disconnect_each_other, sl);
if (GTK_IS_WIDGET (object))
{
gtk_widget_show (sl->refcount_row);
gtk_widget_show (sl->state_row);
gtk_widget_show (sl->request_mode_row);
gtk_widget_show (sl->allocated_size_row);
gtk_widget_show (sl->baseline_row);
gtk_widget_show (sl->mnemonic_label_row);
gtk_widget_show (sl->tick_callback_row);
gtk_widget_show (sl->accessible_role_row);
gtk_widget_show (sl->accessible_name_row);
gtk_widget_show (sl->accessible_description_row);
gtk_widget_show (sl->mapped_row);
gtk_widget_show (sl->realized_row);
gtk_widget_show (sl->is_toplevel_row);
gtk_widget_show (sl->is_toplevel_row);
gtk_widget_show (sl->frame_clock_row);
gtk_widget_show (sl->priv->refcount_row);
gtk_widget_show (sl->priv->state_row);
gtk_widget_show (sl->priv->request_mode_row);
gtk_widget_show (sl->priv->allocated_size_row);
gtk_widget_show (sl->priv->baseline_row);
gtk_widget_show (sl->priv->mnemonic_label_row);
gtk_widget_show (sl->priv->tick_callback_row);
gtk_widget_show (sl->priv->accessible_role_row);
gtk_widget_show (sl->priv->accessible_name_row);
gtk_widget_show (sl->priv->accessible_description_row);
gtk_widget_show (sl->priv->mapped_row);
gtk_widget_show (sl->priv->realized_row);
gtk_widget_show (sl->priv->is_toplevel_row);
gtk_widget_show (sl->priv->is_toplevel_row);
gtk_widget_show (sl->priv->frame_clock_row);
g_signal_connect_object (object, "state-flags-changed", G_CALLBACK (state_flags_changed), sl, 0);
state_flags_changed (GTK_WIDGET (sl->object), 0, sl);
state_flags_changed (GTK_WIDGET (sl->priv->object), 0, sl);
update_allocation (GTK_WIDGET (sl->object), sl);
update_allocation (GTK_WIDGET (sl->priv->object), sl);
}
else
{
gtk_widget_hide (sl->state_row);
gtk_widget_hide (sl->request_mode_row);
gtk_widget_hide (sl->mnemonic_label_row);
gtk_widget_hide (sl->allocated_size_row);
gtk_widget_hide (sl->baseline_row);
gtk_widget_hide (sl->tick_callback_row);
gtk_widget_hide (sl->accessible_role_row);
gtk_widget_hide (sl->accessible_name_row);
gtk_widget_hide (sl->accessible_description_row);
gtk_widget_hide (sl->mapped_row);
gtk_widget_hide (sl->realized_row);
gtk_widget_hide (sl->is_toplevel_row);
gtk_widget_hide (sl->child_visible_row);
gtk_widget_hide (sl->frame_clock_row);
gtk_widget_hide (sl->priv->state_row);
gtk_widget_hide (sl->priv->request_mode_row);
gtk_widget_hide (sl->priv->mnemonic_label_row);
gtk_widget_hide (sl->priv->allocated_size_row);
gtk_widget_hide (sl->priv->baseline_row);
gtk_widget_hide (sl->priv->tick_callback_row);
gtk_widget_hide (sl->priv->accessible_role_row);
gtk_widget_hide (sl->priv->accessible_name_row);
gtk_widget_hide (sl->priv->accessible_description_row);
gtk_widget_hide (sl->priv->mapped_row);
gtk_widget_hide (sl->priv->realized_row);
gtk_widget_hide (sl->priv->is_toplevel_row);
gtk_widget_hide (sl->priv->child_visible_row);
gtk_widget_hide (sl->priv->frame_clock_row);
}
if (GTK_IS_BUILDABLE (object))
{
gtk_widget_show (sl->buildable_id_row);
gtk_widget_show (sl->priv->buildable_id_row);
}
else
{
gtk_widget_hide (sl->buildable_id_row);
gtk_widget_hide (sl->priv->buildable_id_row);
}
if (GDK_IS_FRAME_CLOCK (object))
{
gtk_widget_show (sl->framecount_row);
gtk_widget_show (sl->framerate_row);
gtk_widget_show (sl->priv->framecount_row);
gtk_widget_show (sl->priv->framerate_row);
}
else
{
gtk_widget_hide (sl->framecount_row);
gtk_widget_hide (sl->framerate_row);
gtk_widget_hide (sl->priv->framecount_row);
gtk_widget_hide (sl->priv->framerate_row);
}
update_info (sl);
@@ -499,11 +491,12 @@ gtk_inspector_misc_info_set_object (GtkInspectorMiscInfo *sl,
static void
gtk_inspector_misc_info_init (GtkInspectorMiscInfo *sl)
{
sl->priv = gtk_inspector_misc_info_get_instance_private (sl);
gtk_widget_init_template (GTK_WIDGET (sl));
sl->type_popover = g_object_new (GTK_TYPE_INSPECTOR_TYPE_POPOVER, NULL);
gtk_menu_button_set_popover (GTK_MENU_BUTTON (sl->type),
sl->type_popover);
sl->priv->type_popover = g_object_new (GTK_TYPE_INSPECTOR_TYPE_POPOVER, NULL);
gtk_menu_button_set_popover (GTK_MENU_BUTTON (sl->priv->type),
sl->priv->type_popover);
}
@@ -514,7 +507,7 @@ map (GtkWidget *widget)
GTK_WIDGET_CLASS (gtk_inspector_misc_info_parent_class)->map (widget);
sl->update_source_id = g_timeout_add_seconds (1, update_info, sl);
sl->priv->update_source_id = g_timeout_add_seconds (1, update_info, sl);
update_info (sl);
}
@@ -523,8 +516,8 @@ unmap (GtkWidget *widget)
{
GtkInspectorMiscInfo *sl = GTK_INSPECTOR_MISC_INFO (widget);
g_source_remove (sl->update_source_id);
sl->update_source_id = 0;
g_source_remove (sl->priv->update_source_id);
sl->priv->update_source_id = 0;
GTK_WIDGET_CLASS (gtk_inspector_misc_info_parent_class)->unmap (widget);
}
@@ -534,7 +527,7 @@ dispose (GObject *o)
{
GtkInspectorMiscInfo *sl = GTK_INSPECTOR_MISC_INFO (o);
g_clear_pointer (&sl->swin, gtk_widget_unparent);
g_clear_pointer (&sl->priv->swin, gtk_widget_unparent);
G_OBJECT_CLASS (gtk_inspector_misc_info_parent_class)->dispose (o);
}
@@ -551,52 +544,52 @@ gtk_inspector_misc_info_class_init (GtkInspectorMiscInfoClass *klass)
widget_class->unmap = unmap;
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/misc-info.ui");
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, swin);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, address);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, type);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, refcount_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, refcount);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, state_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, state);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, buildable_id_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, buildable_id);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, mnemonic_label_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, mnemonic_label);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, request_mode_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, request_mode);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, allocated_size_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, allocated_size);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, baseline_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, baseline);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, surface_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, surface);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, surface_button);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, renderer_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, renderer);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, renderer_button);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, frame_clock_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, frame_clock);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, frame_clock_button);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, tick_callback_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, tick_callback);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, framecount_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, framecount);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, framerate_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, framerate);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, accessible_role_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, accessible_role);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, accessible_name_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, accessible_name);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, accessible_description_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, accessible_description);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, mapped_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, mapped);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, realized_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, realized);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, is_toplevel_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, is_toplevel);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, child_visible_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, child_visible);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, swin);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, address);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, type);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, refcount_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, refcount);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, state_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, state);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, buildable_id_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, buildable_id);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, mnemonic_label_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, mnemonic_label);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, request_mode_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, request_mode);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, allocated_size_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, allocated_size);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, baseline_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, baseline);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, surface_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, surface);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, surface_button);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, renderer_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, renderer);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, renderer_button);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, frame_clock_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, frame_clock);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, frame_clock_button);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, tick_callback_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, tick_callback);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, framecount_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, framecount);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, framerate_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, framerate);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_role_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_role);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_name_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_name);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_description_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_description);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, mapped_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, mapped);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, realized_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, realized);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, is_toplevel_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, is_toplevel);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, child_visible_row);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, child_visible);
gtk_widget_class_bind_template_callback (widget_class, show_surface);
gtk_widget_class_bind_template_callback (widget_class, show_renderer);
+16 -1
View File
@@ -22,9 +22,24 @@
#define GTK_TYPE_INSPECTOR_MISC_INFO (gtk_inspector_misc_info_get_type())
#define GTK_INSPECTOR_MISC_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_MISC_INFO, GtkInspectorMiscInfo))
#define GTK_INSPECTOR_MISC_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_INSPECTOR_MISC_INFO, GtkInspectorMiscInfoClass))
#define GTK_INSPECTOR_IS_MISC_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INSPECTOR_MISC_INFO))
#define GTK_INSPECTOR_IS_MISC_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_INSPECTOR_MISC_INFO))
#define GTK_INSPECTOR_MISC_INFO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_INSPECTOR_MISC_INFO, GtkInspectorMiscInfoClass))
typedef struct _GtkInspectorMiscInfo GtkInspectorMiscInfo;
typedef struct _GtkInspectorMiscInfoPrivate GtkInspectorMiscInfoPrivate;
typedef struct _GtkInspectorMiscInfo
{
GtkWidget parent;
GtkInspectorMiscInfoPrivate *priv;
} GtkInspectorMiscInfo;
typedef struct _GtkInspectorMiscInfoClass
{
GtkWidgetClass parent_class;
} GtkInspectorMiscInfoClass;
G_BEGIN_DECLS
+1 -1
View File
@@ -1345,5 +1345,5 @@ gtk_inspector_object_tree_set_display (GtkInspectorObjectTree *wt,
g_object_unref (root_model);
gtk_column_view_set_model (GTK_COLUMN_VIEW (wt->priv->list),
G_LIST_MODEL (wt->priv->selection));
GTK_SELECTION_MODEL (wt->priv->selection));
}
-4
View File
@@ -1741,16 +1741,12 @@ static void
gtk_inspector_prop_editor_class_init (GtkInspectorPropEditorClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->constructed = constructed;
object_class->finalize = finalize;
object_class->get_property = get_property;
object_class->set_property = set_property;
widget_class->focus = gtk_widget_focus_child;
widget_class->grab_focus = gtk_widget_grab_focus_child;
signals[SHOW_OBJECT] =
g_signal_new ("show-object",
G_TYPE_FROM_CLASS (object_class),
+4 -4
View File
@@ -583,7 +583,7 @@ gtk_inspector_prop_list_set_object (GtkInspectorPropList *pl,
guint num_properties;
guint i;
GListStore *store;
GListModel *list;
GtkNoSelection *selection;
GListModel *filtered;
GtkSortListModel *sorted;
@@ -624,15 +624,15 @@ gtk_inspector_prop_list_set_object (GtkInspectorPropList *pl,
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)));
selection = gtk_no_selection_new (G_LIST_MODEL (sorted));
gtk_column_view_set_model (GTK_COLUMN_VIEW (pl->priv->list), list);
gtk_column_view_set_model (GTK_COLUMN_VIEW (pl->priv->list), GTK_SELECTION_MODEL (selection));
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 (selection);
g_object_unref (sorted);
g_object_unref (filtered);
g_object_unref (store);
+63 -58
View File
@@ -52,16 +52,13 @@
#include "renderrecording.h"
#include "startrecording.h"
struct _GtkInspectorRecorder
struct _GtkInspectorRecorderPrivate
{
GtkWidget parent;
GListModel *recordings;
GtkTreeListModel *render_node_model;
GListStore *render_node_root_model;
GtkSingleSelection *render_node_selection;
GtkWidget *box;
GtkWidget *recordings_list;
GtkWidget *render_node_view;
GtkWidget *render_node_list;
@@ -74,12 +71,6 @@ struct _GtkInspectorRecorder
gboolean debug_nodes;
};
typedef struct _GtkInspectorRecorderClass
{
GtkWidgetClass parent;
} GtkInspectorRecorderClass;
enum
{
PROP_0,
@@ -90,7 +81,7 @@ enum
static GParamSpec *props[LAST_PROP] = { NULL, };
G_DEFINE_TYPE (GtkInspectorRecorder, gtk_inspector_recorder, GTK_TYPE_WIDGET)
G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorRecorder, gtk_inspector_recorder, GTK_TYPE_WIDGET)
static GListModel *
create_render_node_list_model (GskRenderNode **nodes,
@@ -210,7 +201,9 @@ static void
recordings_clear_all (GtkButton *button,
GtkInspectorRecorder *recorder)
{
g_list_store_remove_all (G_LIST_STORE (recorder->recordings));
GtkInspectorRecorderPrivate *priv = gtk_inspector_recorder_get_instance_private (recorder);
g_list_store_remove_all (G_LIST_STORE (priv->recordings));
}
static const char *
@@ -368,10 +361,11 @@ recordings_list_row_selected (GtkListBox *box,
GtkListBoxRow *row,
GtkInspectorRecorder *recorder)
{
GtkInspectorRecorderPrivate *priv = gtk_inspector_recorder_get_instance_private (recorder);
GtkInspectorRecording *recording;
if (row)
recording = g_list_model_get_item (recorder->recordings, gtk_list_box_row_get_index (row));
recording = g_list_model_get_item (priv->recordings, gtk_list_box_row_get_index (row));
else
recording = NULL;
@@ -384,18 +378,18 @@ recordings_list_row_selected (GtkListBox *box,
node = gtk_inspector_render_recording_get_node (GTK_INSPECTOR_RENDER_RECORDING (recording));
gsk_render_node_get_bounds (node, &bounds);
paintable = gtk_render_node_paintable_new (node, &bounds);
gtk_picture_set_paintable (GTK_PICTURE (recorder->render_node_view), paintable);
gtk_picture_set_paintable (GTK_PICTURE (priv->render_node_view), paintable);
g_list_store_splice (recorder->render_node_root_model,
0, g_list_model_get_n_items (G_LIST_MODEL (recorder->render_node_root_model)),
g_list_store_splice (priv->render_node_root_model,
0, g_list_model_get_n_items (G_LIST_MODEL (priv->render_node_root_model)),
(gpointer[1]) { paintable },
1);
g_object_unref (paintable);
}
else
{
gtk_picture_set_paintable (GTK_PICTURE (recorder->render_node_view), NULL);
g_list_store_remove_all (recorder->render_node_root_model);
gtk_picture_set_paintable (GTK_PICTURE (priv->render_node_view), NULL);
g_list_store_remove_all (priv->render_node_root_model);
}
if (recording)
@@ -912,11 +906,12 @@ populate_render_node_properties (GtkListStore *store,
static GskRenderNode *
get_selected_node (GtkInspectorRecorder *recorder)
{
GtkInspectorRecorderPrivate *priv = gtk_inspector_recorder_get_instance_private (recorder);
GtkTreeListRow *row_item;
GdkPaintable *paintable;
GskRenderNode *node;
row_item = gtk_single_selection_get_selected_item (recorder->render_node_selection);
row_item = gtk_single_selection_get_selected_item (priv->render_node_selection);
if (row_item == NULL)
return NULL;
@@ -932,20 +927,21 @@ render_node_list_selection_changed (GtkListBox *list,
GtkListBoxRow *row,
GtkInspectorRecorder *recorder)
{
GtkInspectorRecorderPrivate *priv = gtk_inspector_recorder_get_instance_private (recorder);
GskRenderNode *node;
GdkPaintable *paintable;
GtkTreeListRow *row_item;
row_item = gtk_single_selection_get_selected_item (recorder->render_node_selection);
row_item = gtk_single_selection_get_selected_item (priv->render_node_selection);
if (row_item == NULL)
return;
paintable = gtk_tree_list_row_get_item (row_item);
gtk_widget_set_sensitive (recorder->render_node_save_button, TRUE);
gtk_picture_set_paintable (GTK_PICTURE (recorder->render_node_view), paintable);
gtk_widget_set_sensitive (priv->render_node_save_button, TRUE);
gtk_picture_set_paintable (GTK_PICTURE (priv->render_node_view), paintable);
node = gtk_render_node_paintable_get_render_node (GTK_RENDER_NODE_PAINTABLE (paintable));
populate_render_node_properties (GTK_LIST_STORE (recorder->render_node_properties), node);
populate_render_node_properties (GTK_LIST_STORE (priv->render_node_properties), node);
g_object_unref (paintable);
}
@@ -1081,6 +1077,7 @@ node_property_activated (GtkTreeView *tv,
GtkTreeViewColumn *col,
GtkInspectorRecorder *recorder)
{
GtkInspectorRecorderPrivate *priv = gtk_inspector_recorder_get_instance_private (recorder);
GtkTreeIter iter;
GdkRectangle rect;
GdkTexture *texture;
@@ -1088,8 +1085,8 @@ node_property_activated (GtkTreeView *tv,
GtkWidget *popover;
GtkWidget *image;
gtk_tree_model_get_iter (GTK_TREE_MODEL (recorder->render_node_properties), &iter, path);
gtk_tree_model_get (GTK_TREE_MODEL (recorder->render_node_properties), &iter,
gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->render_node_properties), &iter, path);
gtk_tree_model_get (GTK_TREE_MODEL (priv->render_node_properties), &iter,
2, &visible,
3, &texture,
-1);
@@ -1123,15 +1120,16 @@ gtk_inspector_recorder_get_property (GObject *object,
GParamSpec *pspec)
{
GtkInspectorRecorder *recorder = GTK_INSPECTOR_RECORDER (object);
GtkInspectorRecorderPrivate *priv = gtk_inspector_recorder_get_instance_private (recorder);
switch (param_id)
{
case PROP_RECORDING:
g_value_set_boolean (value, recorder->recording != NULL);
g_value_set_boolean (value, priv->recording != NULL);
break;
case PROP_DEBUG_NODES:
g_value_set_boolean (value, recorder->debug_nodes);
g_value_set_boolean (value, priv->debug_nodes);
break;
default:
@@ -1168,11 +1166,11 @@ static void
gtk_inspector_recorder_dispose (GObject *object)
{
GtkInspectorRecorder *recorder = GTK_INSPECTOR_RECORDER (object);
GtkInspectorRecorderPrivate *priv = gtk_inspector_recorder_get_instance_private (recorder);
g_clear_pointer (&recorder->box, gtk_widget_unparent);
g_clear_object (&recorder->render_node_model);
g_clear_object (&recorder->render_node_root_model);
g_clear_object (&recorder->render_node_selection);
g_clear_object (&priv->render_node_model);
g_clear_object (&priv->render_node_root_model);
g_clear_object (&priv->render_node_selection);
G_OBJECT_CLASS (gtk_inspector_recorder_parent_class)->dispose (object);
}
@@ -1204,13 +1202,12 @@ gtk_inspector_recorder_class_init (GtkInspectorRecorderClass *klass)
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/recorder.ui");
gtk_widget_class_bind_template_child (widget_class, GtkInspectorRecorder, box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorRecorder, recordings);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorRecorder, recordings_list);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorRecorder, render_node_view);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorRecorder, render_node_list);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorRecorder, render_node_save_button);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorRecorder, node_property_tree);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorRecorder, recordings);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorRecorder, recordings_list);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorRecorder, render_node_view);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorRecorder, render_node_list);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorRecorder, render_node_save_button);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorRecorder, node_property_tree);
gtk_widget_class_bind_template_callback (widget_class, recordings_clear_all);
gtk_widget_class_bind_template_callback (widget_class, recordings_list_row_selected);
@@ -1223,61 +1220,66 @@ gtk_inspector_recorder_class_init (GtkInspectorRecorderClass *klass)
static void
gtk_inspector_recorder_init (GtkInspectorRecorder *recorder)
{
GtkInspectorRecorderPrivate *priv = gtk_inspector_recorder_get_instance_private (recorder);
GtkListItemFactory *factory;
gtk_widget_init_template (GTK_WIDGET (recorder));
gtk_list_box_bind_model (GTK_LIST_BOX (recorder->recordings_list),
recorder->recordings,
gtk_list_box_bind_model (GTK_LIST_BOX (priv->recordings_list),
priv->recordings,
gtk_inspector_recorder_recordings_list_create_widget,
recorder,
NULL);
recorder->render_node_root_model = g_list_store_new (GDK_TYPE_PAINTABLE);
recorder->render_node_model = gtk_tree_list_model_new (FALSE,
G_LIST_MODEL (recorder->render_node_root_model),
priv->render_node_root_model = g_list_store_new (GDK_TYPE_PAINTABLE);
priv->render_node_model = gtk_tree_list_model_new (FALSE,
G_LIST_MODEL (priv->render_node_root_model),
TRUE,
create_list_model_for_render_node_paintable,
NULL, NULL);
recorder->render_node_selection = gtk_single_selection_new (G_LIST_MODEL (recorder->render_node_model));
g_signal_connect (recorder->render_node_selection, "notify::selected-item", G_CALLBACK (render_node_list_selection_changed), recorder);
priv->render_node_selection = gtk_single_selection_new (G_LIST_MODEL (priv->render_node_model));
g_signal_connect (priv->render_node_selection, "notify::selected-item", G_CALLBACK (render_node_list_selection_changed), recorder);
factory = gtk_signal_list_item_factory_new ();
g_signal_connect (factory, "setup", G_CALLBACK (setup_widget_for_render_node), NULL);
g_signal_connect (factory, "bind", G_CALLBACK (bind_widget_for_render_node), NULL);
gtk_list_view_set_factory (GTK_LIST_VIEW (recorder->render_node_list), factory);
gtk_list_view_set_factory (GTK_LIST_VIEW (priv->render_node_list), factory);
g_object_unref (factory);
gtk_list_view_set_model (GTK_LIST_VIEW (recorder->render_node_list),
G_LIST_MODEL (recorder->render_node_selection));
gtk_list_view_set_model (GTK_LIST_VIEW (priv->render_node_list),
GTK_SELECTION_MODEL (priv->render_node_selection));
recorder->render_node_properties = GTK_TREE_MODEL (gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, GDK_TYPE_TEXTURE));
gtk_tree_view_set_model (GTK_TREE_VIEW (recorder->node_property_tree), recorder->render_node_properties);
g_object_unref (recorder->render_node_properties);
priv->render_node_properties = GTK_TREE_MODEL (gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, GDK_TYPE_TEXTURE));
gtk_tree_view_set_model (GTK_TREE_VIEW (priv->node_property_tree), priv->render_node_properties);
g_object_unref (priv->render_node_properties);
}
static void
gtk_inspector_recorder_add_recording (GtkInspectorRecorder *recorder,
GtkInspectorRecording *recording)
{
g_list_store_append (G_LIST_STORE (recorder->recordings), recording);
GtkInspectorRecorderPrivate *priv = gtk_inspector_recorder_get_instance_private (recorder);
g_list_store_append (G_LIST_STORE (priv->recordings), recording);
}
void
gtk_inspector_recorder_set_recording (GtkInspectorRecorder *recorder,
gboolean recording)
{
GtkInspectorRecorderPrivate *priv = gtk_inspector_recorder_get_instance_private (recorder);
if (gtk_inspector_recorder_is_recording (recorder) == recording)
return;
if (recording)
{
recorder->recording = gtk_inspector_start_recording_new ();
gtk_inspector_recorder_add_recording (recorder, recorder->recording);
priv->recording = gtk_inspector_start_recording_new ();
gtk_inspector_recorder_add_recording (recorder, priv->recording);
}
else
{
g_clear_object (&recorder->recording);
g_clear_object (&priv->recording);
}
g_object_notify_by_pspec (G_OBJECT (recorder), props[PROP_RECORDING]);
@@ -1286,7 +1288,9 @@ gtk_inspector_recorder_set_recording (GtkInspectorRecorder *recorder,
gboolean
gtk_inspector_recorder_is_recording (GtkInspectorRecorder *recorder)
{
return recorder->recording != NULL;
GtkInspectorRecorderPrivate *priv = gtk_inspector_recorder_get_instance_private (recorder);
return priv->recording != NULL;
}
void
@@ -1320,12 +1324,13 @@ void
gtk_inspector_recorder_set_debug_nodes (GtkInspectorRecorder *recorder,
gboolean debug_nodes)
{
GtkInspectorRecorderPrivate *priv = gtk_inspector_recorder_get_instance_private (recorder);
guint flags;
if (recorder->debug_nodes == debug_nodes)
if (priv->debug_nodes == debug_nodes)
return;
recorder->debug_nodes = debug_nodes;
priv->debug_nodes = debug_nodes;
flags = gtk_get_debug_flags ();
+15 -1
View File
@@ -22,9 +22,23 @@
#define GTK_TYPE_INSPECTOR_RECORDER (gtk_inspector_recorder_get_type())
#define GTK_INSPECTOR_RECORDER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_RECORDER, GtkInspectorRecorder))
#define GTK_INSPECTOR_RECORDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_INSPECTOR_RECORDER, GtkInspectorRecorderClass))
#define GTK_INSPECTOR_IS_RECORDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INSPECTOR_RECORDER))
#define GTK_INSPECTOR_IS_RECORDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_INSPECTOR_RECORDER))
#define GTK_INSPECTOR_RECORDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_INSPECTOR_RECORDER, GtkInspectorRecorderClass))
typedef struct _GtkInspectorRecorder GtkInspectorRecorder;
typedef struct _GtkInspectorRecorderPrivate GtkInspectorRecorderPrivate;
typedef struct _GtkInspectorRecorder
{
GtkWidget parent;
} GtkInspectorRecorder;
typedef struct _GtkInspectorRecorderClass
{
GtkWidgetClass parent;
} GtkInspectorRecorderClass;
G_BEGIN_DECLS
+1 -1
View File
@@ -2,7 +2,7 @@
<object class="GListStore" id="recordings"/>
<template class="GtkInspectorRecorder" parent="GtkWidget">
<child>
<object class="GtkBox" id="box">
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
+1 -1
View File
@@ -718,7 +718,7 @@ constructed (GObject *object)
g_object_unref (sort_model);
g_object_unref (sorter);
gtk_column_view_set_model (GTK_COLUMN_VIEW (rl->list), G_LIST_MODEL (rl->selection));
gtk_column_view_set_model (GTK_COLUMN_VIEW (rl->list), GTK_SELECTION_MODEL (rl->selection));
g_signal_connect (rl->selection, "selection-changed", G_CALLBACK (on_selection_changed), rl);
}
-14
View File
@@ -141,26 +141,12 @@ gtk_inspector_shortcuts_size_allocate (GtkWidget *widget,
baseline);
}
static void
dispose (GObject *object)
{
GtkInspectorShortcuts *shortcuts = GTK_INSPECTOR_SHORTCUTS (object);
GtkWidget *child;
while ((child = gtk_widget_get_first_child (GTK_WIDGET (shortcuts))))
gtk_widget_unparent (child);
G_OBJECT_CLASS (gtk_inspector_shortcuts_parent_class)->dispose (object);
}
static void
gtk_inspector_shortcuts_class_init (GtkInspectorShortcutsClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->dispose = dispose;
widget_class->measure = gtk_inspector_shortcuts_measure;
widget_class->size_allocate = gtk_inspector_shortcuts_size_allocate;
-15
View File
@@ -171,26 +171,11 @@ toggle_show (GtkToggleButton *button,
show_types (sl);
}
static void
dispose (GObject *object)
{
GtkInspectorTreeData *sl = GTK_INSPECTOR_TREE_DATA (object);
GtkWidget *child;
while ((child = gtk_widget_get_first_child (GTK_WIDGET (sl))))
gtk_widget_unparent (child);
G_OBJECT_CLASS (gtk_inspector_tree_data_parent_class)->dispose (object);
}
static void
gtk_inspector_tree_data_class_init (GtkInspectorTreeDataClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->dispose = dispose;
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/tree-data.ui");
gtk_widget_class_bind_template_child (widget_class, GtkInspectorTreeData, view);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorTreeData, object_title);
+204 -187
View File
@@ -56,10 +56,8 @@
#define EPSILON 1e-10
struct _GtkInspectorVisual
struct _GtkInspectorVisualPrivate
{
GtkWidget widget;
GtkWidget *swin;
GtkWidget *box;
GtkWidget *visual_box;
@@ -85,6 +83,7 @@ struct _GtkInspectorVisual
GtkWidget *fallback_switch;
GtkWidget *baselines_switch;
GtkWidget *layout_switch;
GtkWidget *resize_switch;
GtkWidget *focus_switch;
GtkWidget *misc_box;
@@ -100,12 +99,7 @@ struct _GtkInspectorVisual
GdkDisplay *display;
};
typedef struct _GtkInspectorVisualClass
{
GtkWidgetClass parent_class;
} GtkInspectorVisualClass;
G_DEFINE_TYPE (GtkInspectorVisual, gtk_inspector_visual, GTK_TYPE_WIDGET)
G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorVisual, gtk_inspector_visual, GTK_TYPE_WIDGET)
static void
fix_direction_recurse (GtkWidget *widget,
@@ -157,9 +151,9 @@ init_direction (GtkInspectorVisual *vis)
{
initial_direction = gtk_widget_get_default_direction ();
if (initial_direction == GTK_TEXT_DIR_LTR)
gtk_drop_down_set_selected (GTK_DROP_DOWN (vis->direction_combo), 0);
gtk_drop_down_set_selected (GTK_DROP_DOWN (vis->priv->direction_combo), 0);
else
gtk_drop_down_set_selected (GTK_DROP_DOWN (vis->direction_combo), 1);
gtk_drop_down_set_selected (GTK_DROP_DOWN (vis->priv->direction_combo), 1);
}
static void
@@ -175,11 +169,11 @@ static double
get_font_scale (GtkInspectorVisual *vis)
{
#ifdef GDK_WINDOWING_X11
if (GDK_IS_X11_DISPLAY (vis->display))
if (GDK_IS_X11_DISPLAY (vis->priv->display))
{
int dpi_int;
g_object_get (gtk_settings_get_for_display (vis->display),
g_object_get (gtk_settings_get_for_display (vis->priv->display),
"gtk-xft-dpi", &dpi_int,
NULL);
@@ -187,11 +181,11 @@ get_font_scale (GtkInspectorVisual *vis)
}
#endif
#ifdef GDK_WINDOWING_WAYLAND
if (GDK_IS_WAYLAND_DISPLAY (vis->display))
if (GDK_IS_WAYLAND_DISPLAY (vis->priv->display))
{
int dpi_int;
g_object_get (gtk_settings_get_for_display (vis->display),
g_object_get (gtk_settings_get_for_display (vis->priv->display),
"gtk-xft-dpi", &dpi_int,
NULL);
@@ -208,18 +202,18 @@ update_font_scale (GtkInspectorVisual *vis,
gboolean update_adjustment,
gboolean update_entry)
{
g_object_set (gtk_settings_get_for_display (vis->display),
g_object_set (gtk_settings_get_for_display (vis->priv->display),
"gtk-xft-dpi", (gint)(factor * 96 * 1024),
NULL);
if (update_adjustment)
gtk_adjustment_set_value (vis->font_scale_adjustment, factor);
gtk_adjustment_set_value (vis->priv->font_scale_adjustment, factor);
if (update_entry)
{
gchar *str = g_strdup_printf ("%0.2f", factor);
gtk_editable_set_text (GTK_EDITABLE (vis->font_scale_entry), str);
gtk_editable_set_text (GTK_EDITABLE (vis->priv->font_scale_entry), str);
g_free (str);
}
}
@@ -251,6 +245,7 @@ fps_activate (GtkSwitch *sw,
GParamSpec *pspec,
GtkInspectorVisual *vis)
{
GtkInspectorVisualPrivate *priv = vis->priv;
GtkInspectorWindow *iw;
gboolean fps;
@@ -261,19 +256,19 @@ fps_activate (GtkSwitch *sw,
if (fps)
{
if (vis->fps_overlay == NULL)
if (priv->fps_overlay == NULL)
{
vis->fps_overlay = gtk_fps_overlay_new ();
gtk_inspector_window_add_overlay (iw, vis->fps_overlay);
g_object_unref (vis->fps_overlay);
priv->fps_overlay = gtk_fps_overlay_new ();
gtk_inspector_window_add_overlay (iw, priv->fps_overlay);
g_object_unref (priv->fps_overlay);
}
}
else
{
if (vis->fps_overlay != NULL)
if (priv->fps_overlay != NULL)
{
gtk_inspector_window_remove_overlay (iw, vis->fps_overlay);
vis->fps_overlay = NULL;
gtk_inspector_window_remove_overlay (iw, priv->fps_overlay);
priv->fps_overlay = NULL;
}
}
@@ -285,6 +280,7 @@ updates_activate (GtkSwitch *sw,
GParamSpec *pspec,
GtkInspectorVisual *vis)
{
GtkInspectorVisualPrivate *priv = vis->priv;
GtkInspectorWindow *iw;
gboolean updates;
@@ -295,19 +291,19 @@ updates_activate (GtkSwitch *sw,
if (updates)
{
if (vis->updates_overlay == NULL)
if (priv->updates_overlay == NULL)
{
vis->updates_overlay = gtk_updates_overlay_new ();
gtk_inspector_window_add_overlay (iw, vis->updates_overlay);
g_object_unref (vis->updates_overlay);
priv->updates_overlay = gtk_updates_overlay_new ();
gtk_inspector_window_add_overlay (iw, priv->updates_overlay);
g_object_unref (priv->updates_overlay);
}
}
else
{
if (vis->updates_overlay != NULL)
if (priv->updates_overlay != NULL)
{
gtk_inspector_window_remove_overlay (iw, vis->updates_overlay);
vis->updates_overlay = NULL;
gtk_inspector_window_remove_overlay (iw, priv->updates_overlay);
priv->updates_overlay = NULL;
}
}
@@ -361,6 +357,7 @@ baselines_activate (GtkSwitch *sw,
GParamSpec *pspec,
GtkInspectorVisual *vis)
{
GtkInspectorVisualPrivate *priv = vis->priv;
GtkInspectorWindow *iw;
gboolean baselines;
@@ -371,19 +368,19 @@ baselines_activate (GtkSwitch *sw,
if (baselines)
{
if (vis->baseline_overlay == NULL)
if (priv->baseline_overlay == NULL)
{
vis->baseline_overlay = gtk_baseline_overlay_new ();
gtk_inspector_window_add_overlay (iw, vis->baseline_overlay);
g_object_unref (vis->baseline_overlay);
priv->baseline_overlay = gtk_baseline_overlay_new ();
gtk_inspector_window_add_overlay (iw, priv->baseline_overlay);
g_object_unref (priv->baseline_overlay);
}
}
else
{
if (vis->baseline_overlay != NULL)
if (priv->baseline_overlay != NULL)
{
gtk_inspector_window_remove_overlay (iw, vis->baseline_overlay);
vis->baseline_overlay = NULL;
gtk_inspector_window_remove_overlay (iw, priv->baseline_overlay);
priv->baseline_overlay = NULL;
}
}
@@ -395,6 +392,7 @@ layout_activate (GtkSwitch *sw,
GParamSpec *pspec,
GtkInspectorVisual *vis)
{
GtkInspectorVisualPrivate *priv = vis->priv;
GtkInspectorWindow *iw;
gboolean draw_layout;
@@ -405,30 +403,44 @@ layout_activate (GtkSwitch *sw,
if (draw_layout)
{
if (vis->layout_overlay == NULL)
if (priv->layout_overlay == NULL)
{
vis->layout_overlay = gtk_layout_overlay_new ();
gtk_inspector_window_add_overlay (iw, vis->layout_overlay);
g_object_unref (vis->layout_overlay);
priv->layout_overlay = gtk_layout_overlay_new ();
gtk_inspector_window_add_overlay (iw, priv->layout_overlay);
g_object_unref (priv->layout_overlay);
}
}
else
{
if (vis->layout_overlay != NULL)
if (priv->layout_overlay != NULL)
{
gtk_inspector_window_remove_overlay (iw, vis->layout_overlay);
vis->layout_overlay = NULL;
gtk_inspector_window_remove_overlay (iw, priv->layout_overlay);
priv->layout_overlay = NULL;
}
}
redraw_everything ();
}
static void
widget_resize_activate (GtkSwitch *sw)
{
guint flags = gtk_get_debug_flags ();
if (gtk_switch_get_active (sw))
flags |= GTK_DEBUG_RESIZE;
else
flags &= ~GTK_DEBUG_RESIZE;
gtk_set_debug_flags (flags);
}
static void
focus_activate (GtkSwitch *sw,
GParamSpec *pspec,
GtkInspectorVisual *vis)
{
GtkInspectorVisualPrivate *priv = vis->priv;
GtkInspectorWindow *iw;
gboolean focus;
@@ -439,19 +451,19 @@ focus_activate (GtkSwitch *sw,
if (focus)
{
if (vis->focus_overlay == NULL)
if (priv->focus_overlay == NULL)
{
vis->focus_overlay = gtk_focus_overlay_new ();
gtk_inspector_window_add_overlay (iw, vis->focus_overlay);
g_object_unref (vis->focus_overlay);
priv->focus_overlay = gtk_focus_overlay_new ();
gtk_inspector_window_add_overlay (iw, priv->focus_overlay);
g_object_unref (priv->focus_overlay);
}
}
else
{
if (vis->focus_overlay != NULL)
if (priv->focus_overlay != NULL)
{
gtk_inspector_window_remove_overlay (iw, vis->focus_overlay);
vis->focus_overlay = NULL;
gtk_inspector_window_remove_overlay (iw, priv->focus_overlay);
priv->focus_overlay = NULL;
}
}
@@ -584,10 +596,10 @@ init_theme (GtkInspectorVisual *vis)
g_list_free (list);
g_hash_table_destroy (t);
gtk_drop_down_set_from_strings (GTK_DROP_DOWN (vis->theme_combo), (const char **)names);
gtk_drop_down_set_from_strings (GTK_DROP_DOWN (vis->priv->theme_combo), (const char **)names);
g_object_bind_property_full (gtk_settings_get_for_display (vis->display), "gtk-theme-name",
vis->theme_combo, "selected",
g_object_bind_property_full (gtk_settings_get_for_display (vis->priv->display), "gtk-theme-name",
vis->priv->theme_combo, "selected",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE,
theme_to_pos, pos_to_theme, names, (GDestroyNotify)g_strfreev);
@@ -596,8 +608,8 @@ init_theme (GtkInspectorVisual *vis)
GtkWidget *row;
/* theme is hardcoded, nothing we can do */
gtk_widget_set_sensitive (vis->theme_combo, FALSE);
row = gtk_widget_get_ancestor (vis->theme_combo, GTK_TYPE_LIST_BOX_ROW);
gtk_widget_set_sensitive (vis->priv->theme_combo, FALSE);
row = gtk_widget_get_ancestor (vis->priv->theme_combo, GTK_TYPE_LIST_BOX_ROW);
gtk_widget_set_tooltip_text (row, _("Theme is hardcoded by GTK_THEME"));
}
}
@@ -605,9 +617,9 @@ init_theme (GtkInspectorVisual *vis)
static void
init_dark (GtkInspectorVisual *vis)
{
g_object_bind_property (gtk_settings_get_for_display (vis->display),
g_object_bind_property (gtk_settings_get_for_display (vis->priv->display),
"gtk-application-prefer-dark-theme",
vis->dark_switch, "active",
vis->priv->dark_switch, "active",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
if (g_getenv ("GTK_THEME") != NULL)
@@ -615,8 +627,8 @@ init_dark (GtkInspectorVisual *vis)
GtkWidget *row;
/* theme is hardcoded, nothing we can do */
gtk_widget_set_sensitive (vis->dark_switch, FALSE);
row = gtk_widget_get_ancestor (vis->theme_combo, GTK_TYPE_LIST_BOX_ROW);
gtk_widget_set_sensitive (vis->priv->dark_switch, FALSE);
row = gtk_widget_get_ancestor (vis->priv->theme_combo, GTK_TYPE_LIST_BOX_ROW);
gtk_widget_set_tooltip_text (row, _("Theme is hardcoded by GTK_THEME"));
}
}
@@ -680,10 +692,10 @@ init_icons (GtkInspectorVisual *vis)
g_hash_table_destroy (t);
g_list_free (list);
gtk_drop_down_set_from_strings (GTK_DROP_DOWN (vis->icon_combo), (const char **)names);
gtk_drop_down_set_from_strings (GTK_DROP_DOWN (vis->priv->icon_combo), (const char **)names);
g_object_bind_property_full (gtk_settings_get_for_display (vis->display), "gtk-icon-theme-name",
vis->icon_combo, "selected",
g_object_bind_property_full (gtk_settings_get_for_display (vis->priv->display), "gtk-icon-theme-name",
vis->priv->icon_combo, "selected",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE,
theme_to_pos, pos_to_theme, names, (GDestroyNotify)g_strfreev);
}
@@ -746,10 +758,10 @@ init_cursors (GtkInspectorVisual *vis)
g_hash_table_destroy (t);
g_list_free (list);
gtk_drop_down_set_from_strings (GTK_DROP_DOWN (vis->cursor_combo), (const char **)names);
gtk_drop_down_set_from_strings (GTK_DROP_DOWN (vis->priv->cursor_combo), (const char **)names);
g_object_bind_property_full (gtk_settings_get_for_display (vis->display), "gtk-cursor-theme-name",
vis->cursor_combo, "selected",
g_object_bind_property_full (gtk_settings_get_for_display (vis->priv->display), "gtk-cursor-theme-name",
vis->priv->cursor_combo, "selected",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE,
theme_to_pos, pos_to_theme, names, (GDestroyNotify)g_strfreev);
}
@@ -760,7 +772,7 @@ cursor_size_changed (GtkAdjustment *adjustment, GtkInspectorVisual *vis)
gint size;
size = gtk_adjustment_get_value (adjustment);
g_object_set (gtk_settings_get_for_display (vis->display), "gtk-cursor-theme-size", size, NULL);
g_object_set (gtk_settings_get_for_display (vis->priv->display), "gtk-cursor-theme-size", size, NULL);
}
static void
@@ -768,21 +780,21 @@ init_cursor_size (GtkInspectorVisual *vis)
{
gint size;
g_object_get (gtk_settings_get_for_display (vis->display), "gtk-cursor-theme-size", &size, NULL);
g_object_get (gtk_settings_get_for_display (vis->priv->display), "gtk-cursor-theme-size", &size, NULL);
if (size == 0)
size = 32;
gtk_adjustment_set_value (vis->scale_adjustment, (gdouble)size);
g_signal_connect (vis->cursor_size_adjustment, "value-changed",
gtk_adjustment_set_value (vis->priv->scale_adjustment, (gdouble)size);
g_signal_connect (vis->priv->cursor_size_adjustment, "value-changed",
G_CALLBACK (cursor_size_changed), vis);
}
static void
init_font (GtkInspectorVisual *vis)
{
g_object_bind_property (gtk_settings_get_for_display (vis->display),
g_object_bind_property (gtk_settings_get_for_display (vis->priv->display),
"gtk-font-name",
vis->font_button, "font",
vis->priv->font_button, "font",
G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE);
}
@@ -793,9 +805,9 @@ init_font_scale (GtkInspectorVisual *vis)
scale = get_font_scale (vis);
update_font_scale (vis, scale, TRUE, TRUE);
g_signal_connect (vis->font_scale_adjustment, "value-changed",
g_signal_connect (vis->priv->font_scale_adjustment, "value-changed",
G_CALLBACK (font_scale_adjustment_changed), vis);
g_signal_connect (vis->font_scale_entry, "activate",
g_signal_connect (vis->priv->font_scale_entry, "activate",
G_CALLBACK (font_scale_entry_activated), vis);
}
@@ -806,7 +818,7 @@ scale_changed (GtkAdjustment *adjustment, GtkInspectorVisual *vis)
gint scale;
scale = gtk_adjustment_get_value (adjustment);
gdk_x11_display_set_surface_scale (vis->display, scale);
gdk_x11_display_set_surface_scale (vis->priv->display, scale);
}
#endif
@@ -814,13 +826,13 @@ static void
init_scale (GtkInspectorVisual *vis)
{
#if defined (GDK_WINDOWING_X11)
if (GDK_IS_X11_DISPLAY (vis->display))
if (GDK_IS_X11_DISPLAY (vis->priv->display))
{
gdouble scale;
scale = gdk_monitor_get_scale_factor (gdk_x11_display_get_primary_monitor (vis->display));
gtk_adjustment_set_value (vis->scale_adjustment, scale);
g_signal_connect (vis->scale_adjustment, "value-changed",
scale = gdk_monitor_get_scale_factor (gdk_x11_display_get_primary_monitor (vis->priv->display));
gtk_adjustment_set_value (vis->priv->scale_adjustment, scale);
g_signal_connect (vis->priv->scale_adjustment, "value-changed",
G_CALLBACK (scale_changed), vis);
}
else
@@ -828,9 +840,9 @@ init_scale (GtkInspectorVisual *vis)
{
GtkWidget *row;
gtk_adjustment_set_value (vis->scale_adjustment, 1);
gtk_widget_set_sensitive (vis->hidpi_spin, FALSE);
row = gtk_widget_get_ancestor (vis->hidpi_spin, GTK_TYPE_LIST_BOX_ROW);
gtk_adjustment_set_value (vis->priv->scale_adjustment, 1);
gtk_widget_set_sensitive (vis->priv->hidpi_spin, FALSE);
row = gtk_widget_get_ancestor (vis->priv->hidpi_spin, GTK_TYPE_LIST_BOX_ROW);
gtk_widget_set_tooltip_text (row, _("Backend does not support window scaling"));
}
}
@@ -838,8 +850,8 @@ init_scale (GtkInspectorVisual *vis)
static void
init_animation (GtkInspectorVisual *vis)
{
g_object_bind_property (gtk_settings_get_for_display (vis->display), "gtk-enable-animations",
vis->animation_switch, "active",
g_object_bind_property (gtk_settings_get_for_display (vis->priv->display), "gtk-enable-animations",
vis->priv->animation_switch, "active",
G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE);
}
@@ -852,14 +864,14 @@ update_slowdown (GtkInspectorVisual *vis,
_gtk_set_slowdown (slowdown);
if (update_adjustment)
gtk_adjustment_set_value (vis->slowdown_adjustment,
gtk_adjustment_set_value (vis->priv->slowdown_adjustment,
log2 (slowdown));
if (update_entry)
{
gchar *str = g_strdup_printf ("%0.*f", 2, slowdown);
gtk_editable_set_text (GTK_EDITABLE (vis->slowdown_entry), str);
gtk_editable_set_text (GTK_EDITABLE (vis->priv->slowdown_entry), str);
g_free (str);
}
}
@@ -893,9 +905,9 @@ static void
init_slowdown (GtkInspectorVisual *vis)
{
update_slowdown (vis, _gtk_get_slowdown (), TRUE, TRUE);
g_signal_connect (vis->slowdown_adjustment, "value-changed",
g_signal_connect (vis->priv->slowdown_adjustment, "value-changed",
G_CALLBACK (slowdown_adjustment_changed), vis);
g_signal_connect (vis->slowdown_entry, "activate",
g_signal_connect (vis->priv->slowdown_entry, "activate",
G_CALLBACK (slowdown_entry_activated), vis);
}
@@ -917,8 +929,8 @@ update_touchscreen (GtkSwitch *sw)
static void
init_touchscreen (GtkInspectorVisual *vis)
{
gtk_switch_set_active (GTK_SWITCH (vis->touchscreen_switch), (gtk_get_debug_flags () & GTK_DEBUG_TOUCHSCREEN) != 0);
g_signal_connect (vis->touchscreen_switch, "notify::active",
gtk_switch_set_active (GTK_SWITCH (vis->priv->touchscreen_switch), (gtk_get_debug_flags () & GTK_DEBUG_TOUCHSCREEN) != 0);
g_signal_connect (vis->priv->touchscreen_switch, "notify::active",
G_CALLBACK (update_touchscreen), NULL);
if (g_getenv ("GTK_TEST_TOUCHSCREEN") != 0)
@@ -926,9 +938,9 @@ init_touchscreen (GtkInspectorVisual *vis)
GtkWidget *row;
/* hardcoded, nothing we can do */
gtk_switch_set_active (GTK_SWITCH (vis->touchscreen_switch), TRUE);
gtk_widget_set_sensitive (vis->touchscreen_switch, FALSE);
row = gtk_widget_get_ancestor (vis->touchscreen_switch, GTK_TYPE_LIST_BOX_ROW);
gtk_switch_set_active (GTK_SWITCH (vis->priv->touchscreen_switch), TRUE);
gtk_widget_set_sensitive (vis->priv->touchscreen_switch, FALSE);
row = gtk_widget_get_ancestor (vis->priv->touchscreen_switch, GTK_TYPE_LIST_BOX_ROW);
gtk_widget_set_tooltip_text (row, _("Setting is hardcoded by GTK_TEST_TOUCHSCREEN"));
}
}
@@ -939,17 +951,17 @@ keynav_failed (GtkWidget *widget, GtkDirectionType direction, GtkInspectorVisual
GtkWidget *next;
if (direction == GTK_DIR_DOWN &&
widget == vis->visual_box)
next = vis->debug_box;
widget == vis->priv->visual_box)
next = vis->priv->debug_box;
else if (direction == GTK_DIR_DOWN &&
widget == vis->debug_box)
next = vis->misc_box;
widget == vis->priv->debug_box)
next = vis->priv->misc_box;
else if (direction == GTK_DIR_UP &&
widget == vis->debug_box)
next = vis->visual_box;
widget == vis->priv->debug_box)
next = vis->priv->visual_box;
else if (direction == GTK_DIR_UP &&
widget == vis->misc_box)
next = vis->debug_box;
widget == vis->priv->misc_box)
next = vis->priv->debug_box;
else
next = NULL;
@@ -967,54 +979,59 @@ row_activated (GtkListBox *box,
GtkListBoxRow *row,
GtkInspectorVisual *vis)
{
if (gtk_widget_is_ancestor (vis->dark_switch, GTK_WIDGET (row)))
if (gtk_widget_is_ancestor (vis->priv->dark_switch, GTK_WIDGET (row)))
{
GtkSwitch *sw = GTK_SWITCH (vis->dark_switch);
GtkSwitch *sw = GTK_SWITCH (vis->priv->dark_switch);
gtk_switch_set_active (sw, !gtk_switch_get_active (sw));
}
else if (gtk_widget_is_ancestor (vis->animation_switch, GTK_WIDGET (row)))
else if (gtk_widget_is_ancestor (vis->priv->animation_switch, GTK_WIDGET (row)))
{
GtkSwitch *sw = GTK_SWITCH (vis->animation_switch);
GtkSwitch *sw = GTK_SWITCH (vis->priv->animation_switch);
gtk_switch_set_active (sw, !gtk_switch_get_active (sw));
}
else if (gtk_widget_is_ancestor (vis->fps_switch, GTK_WIDGET (row)))
else if (gtk_widget_is_ancestor (vis->priv->fps_switch, GTK_WIDGET (row)))
{
GtkSwitch *sw = GTK_SWITCH (vis->fps_switch);
GtkSwitch *sw = GTK_SWITCH (vis->priv->fps_switch);
gtk_switch_set_active (sw, !gtk_switch_get_active (sw));
}
else if (gtk_widget_is_ancestor (vis->updates_switch, GTK_WIDGET (row)))
else if (gtk_widget_is_ancestor (vis->priv->updates_switch, GTK_WIDGET (row)))
{
GtkSwitch *sw = GTK_SWITCH (vis->updates_switch);
GtkSwitch *sw = GTK_SWITCH (vis->priv->updates_switch);
gtk_switch_set_active (sw, !gtk_switch_get_active (sw));
}
else if (gtk_widget_is_ancestor (vis->fallback_switch, GTK_WIDGET (row)))
else if (gtk_widget_is_ancestor (vis->priv->fallback_switch, GTK_WIDGET (row)))
{
GtkSwitch *sw = GTK_SWITCH (vis->fallback_switch);
GtkSwitch *sw = GTK_SWITCH (vis->priv->fallback_switch);
gtk_switch_set_active (sw, !gtk_switch_get_active (sw));
}
else if (gtk_widget_is_ancestor (vis->baselines_switch, GTK_WIDGET (row)))
else if (gtk_widget_is_ancestor (vis->priv->baselines_switch, GTK_WIDGET (row)))
{
GtkSwitch *sw = GTK_SWITCH (vis->baselines_switch);
GtkSwitch *sw = GTK_SWITCH (vis->priv->baselines_switch);
gtk_switch_set_active (sw, !gtk_switch_get_active (sw));
}
else if (gtk_widget_is_ancestor (vis->layout_switch, GTK_WIDGET (row)))
else if (gtk_widget_is_ancestor (vis->priv->layout_switch, GTK_WIDGET (row)))
{
GtkSwitch *sw = GTK_SWITCH (vis->layout_switch);
GtkSwitch *sw = GTK_SWITCH (vis->priv->layout_switch);
gtk_switch_set_active (sw, !gtk_switch_get_active (sw));
}
else if (gtk_widget_is_ancestor (vis->focus_switch, GTK_WIDGET (row)))
else if (gtk_widget_is_ancestor (vis->priv->resize_switch, GTK_WIDGET (row)))
{
GtkSwitch *sw = GTK_SWITCH (vis->focus_switch);
GtkSwitch *sw = GTK_SWITCH (vis->priv->resize_switch);
gtk_switch_set_active (sw, !gtk_switch_get_active (sw));
}
else if (gtk_widget_is_ancestor (vis->touchscreen_switch, GTK_WIDGET (row)))
else if (gtk_widget_is_ancestor (vis->priv->focus_switch, GTK_WIDGET (row)))
{
GtkSwitch *sw = GTK_SWITCH (vis->touchscreen_switch);
GtkSwitch *sw = GTK_SWITCH (vis->priv->focus_switch);
gtk_switch_set_active (sw, !gtk_switch_get_active (sw));
}
else if (gtk_widget_is_ancestor (vis->software_gl_switch, GTK_WIDGET (row)))
else if (gtk_widget_is_ancestor (vis->priv->touchscreen_switch, GTK_WIDGET (row)))
{
GtkSwitch *sw = GTK_SWITCH (vis->software_gl_switch);
GtkSwitch *sw = GTK_SWITCH (vis->priv->touchscreen_switch);
gtk_switch_set_active (sw, !gtk_switch_get_active (sw));
}
else if (gtk_widget_is_ancestor (vis->priv->software_gl_switch, GTK_WIDGET (row)))
{
GtkSwitch *sw = GTK_SWITCH (vis->priv->software_gl_switch);
gtk_switch_set_active (sw, !gtk_switch_get_active (sw));
}
}
@@ -1022,16 +1039,16 @@ row_activated (GtkListBox *box,
static void
init_gl (GtkInspectorVisual *vis)
{
GdkDebugFlags flags = gdk_display_get_debug_flags (vis->display);
GdkDebugFlags flags = gdk_display_get_debug_flags (vis->priv->display);
gtk_switch_set_active (GTK_SWITCH (vis->software_gl_switch), flags & GDK_DEBUG_GL_SOFTWARE);
gtk_switch_set_active (GTK_SWITCH (vis->priv->software_gl_switch), flags & GDK_DEBUG_GL_SOFTWARE);
if (flags & GDK_DEBUG_GL_DISABLE)
{
GtkWidget *row;
gtk_widget_set_sensitive (vis->software_gl_switch, FALSE);
row = gtk_widget_get_ancestor (vis->software_gl_switch, GTK_TYPE_LIST_BOX_ROW);
gtk_widget_set_sensitive (vis->priv->software_gl_switch, FALSE);
row = gtk_widget_get_ancestor (vis->priv->software_gl_switch, GTK_TYPE_LIST_BOX_ROW);
gtk_widget_set_tooltip_text (row, _("GL rendering is disabled"));
}
}
@@ -1041,14 +1058,14 @@ update_gl_flag (GtkSwitch *sw,
GdkDebugFlags flag,
GtkInspectorVisual *vis)
{
GdkDebugFlags flags = gdk_display_get_debug_flags (vis->display);
GdkDebugFlags flags = gdk_display_get_debug_flags (vis->priv->display);
if (gtk_switch_get_active (sw))
flags |= flag;
else
flags &= ~flag;
gdk_display_set_debug_flags (vis->display, flags);
gdk_display_set_debug_flags (vis->priv->display, flags);
}
static void
@@ -1062,6 +1079,7 @@ software_gl_activate (GtkSwitch *sw,
static void
gtk_inspector_visual_init (GtkInspectorVisual *vis)
{
vis->priv = gtk_inspector_visual_get_instance_private (vis);
gtk_widget_init_template (GTK_WIDGET (vis));
}
@@ -1072,46 +1090,42 @@ gtk_inspector_visual_constructed (GObject *object)
G_OBJECT_CLASS (gtk_inspector_visual_parent_class)->constructed (object);
g_signal_connect (vis->visual_box, "keynav-failed", G_CALLBACK (keynav_failed), vis);
g_signal_connect (vis->debug_box, "keynav-failed", G_CALLBACK (keynav_failed), vis);
g_signal_connect (vis->misc_box, "keynav-failed", G_CALLBACK (keynav_failed), vis);
g_signal_connect (vis->visual_box, "row-activated", G_CALLBACK (row_activated), vis);
g_signal_connect (vis->debug_box, "row-activated", G_CALLBACK (row_activated), vis);
g_signal_connect (vis->misc_box, "row-activated", G_CALLBACK (row_activated), vis);
g_signal_connect (vis->priv->visual_box, "keynav-failed", G_CALLBACK (keynav_failed), vis);
g_signal_connect (vis->priv->debug_box, "keynav-failed", G_CALLBACK (keynav_failed), vis);
g_signal_connect (vis->priv->misc_box, "keynav-failed", G_CALLBACK (keynav_failed), vis);
g_signal_connect (vis->priv->visual_box, "row-activated", G_CALLBACK (row_activated), vis);
g_signal_connect (vis->priv->debug_box, "row-activated", G_CALLBACK (row_activated), vis);
g_signal_connect (vis->priv->misc_box, "row-activated", G_CALLBACK (row_activated), vis);
}
static void
gtk_inspector_visual_dispose (GObject *object)
{
GtkInspectorVisual *vis = GTK_INSPECTOR_VISUAL (object);
GtkInspectorWindow *iw = GTK_INSPECTOR_WINDOW (gtk_widget_get_root (GTK_WIDGET (vis)));
g_clear_pointer (&vis->swin, gtk_widget_unparent);
if (vis->layout_overlay)
{
gtk_inspector_window_remove_overlay (iw, vis->layout_overlay);
vis->layout_overlay = NULL;
}
if (vis->updates_overlay)
{
gtk_inspector_window_remove_overlay (iw, vis->updates_overlay);
vis->updates_overlay = NULL;
}
if (vis->fps_overlay)
{
gtk_inspector_window_remove_overlay (iw, vis->fps_overlay);
vis->fps_overlay = NULL;
}
if (vis->focus_overlay)
{
gtk_inspector_window_remove_overlay (iw, vis->focus_overlay);
vis->focus_overlay = NULL;
}
g_clear_pointer (&vis->priv->swin, gtk_widget_unparent);
G_OBJECT_CLASS (gtk_inspector_visual_parent_class)->dispose (object);
}
static void
gtk_inspector_visual_finalize (GObject *object)
{
GtkInspectorVisual *vis = GTK_INSPECTOR_VISUAL (object);
GtkInspectorWindow *iw = GTK_INSPECTOR_WINDOW (gtk_widget_get_root (GTK_WIDGET (vis)));
if (vis->priv->layout_overlay)
gtk_inspector_window_remove_overlay (iw, vis->priv->layout_overlay);
if (vis->priv->updates_overlay)
gtk_inspector_window_remove_overlay (iw, vis->priv->updates_overlay);
if (vis->priv->fps_overlay)
gtk_inspector_window_remove_overlay (iw, vis->priv->fps_overlay);
if (vis->priv->focus_overlay)
gtk_inspector_window_remove_overlay (iw, vis->priv->focus_overlay);
G_OBJECT_CLASS (gtk_inspector_visual_parent_class)->finalize (object);
}
static void
gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
{
@@ -1120,36 +1134,38 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
object_class->constructed = gtk_inspector_visual_constructed;
object_class->dispose = gtk_inspector_visual_dispose;
object_class->finalize = gtk_inspector_visual_finalize;
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/visual.ui");
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, swin);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, direction_combo);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, theme_combo);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, dark_switch);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, cursor_combo);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, cursor_size_spin);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, cursor_size_adjustment);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, icon_combo);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, hidpi_spin);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, scale_adjustment);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, animation_switch);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, slowdown_adjustment);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, slowdown_entry);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, touchscreen_switch);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, visual_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, debug_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, font_button);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, misc_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, software_gl_switch);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, font_scale_entry);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, font_scale_adjustment);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, fps_switch);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, updates_switch);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, fallback_switch);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, baselines_switch);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, layout_switch);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorVisual, focus_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, swin);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, direction_combo);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, theme_combo);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, dark_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, cursor_combo);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, cursor_size_spin);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, cursor_size_adjustment);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, icon_combo);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, hidpi_spin);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, scale_adjustment);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, animation_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, slowdown_adjustment);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, slowdown_entry);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, touchscreen_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, visual_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, debug_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, font_button);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, misc_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, software_gl_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, font_scale_entry);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, font_scale_adjustment);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, fps_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, updates_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, fallback_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, baselines_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, layout_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, resize_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, focus_switch);
gtk_widget_class_bind_template_callback (widget_class, fps_activate);
gtk_widget_class_bind_template_callback (widget_class, updates_activate);
@@ -1157,6 +1173,7 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
gtk_widget_class_bind_template_callback (widget_class, direction_changed);
gtk_widget_class_bind_template_callback (widget_class, baselines_activate);
gtk_widget_class_bind_template_callback (widget_class, layout_activate);
gtk_widget_class_bind_template_callback (widget_class, widget_resize_activate);
gtk_widget_class_bind_template_callback (widget_class, focus_activate);
gtk_widget_class_bind_template_callback (widget_class, software_gl_activate);
@@ -1167,7 +1184,7 @@ void
gtk_inspector_visual_set_display (GtkInspectorVisual *vis,
GdkDisplay *display)
{
vis->display = display;
vis->priv->display = display;
init_direction (vis);
init_theme (vis);
+17 -2
View File
@@ -18,13 +18,28 @@
#ifndef _GTK_INSPECTOR_VISUAL_H_
#define _GTK_INSPECTOR_VISUAL_H_
#include <gtk/gtkwidget.h>
#include <gtk/gtkscrolledwindow.h>
#define GTK_TYPE_INSPECTOR_VISUAL (gtk_inspector_visual_get_type())
#define GTK_INSPECTOR_VISUAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_VISUAL, GtkInspectorVisual))
#define GTK_INSPECTOR_VISUAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_INSPECTOR_VISUAL, GtkInspectorVisualClass))
#define GTK_INSPECTOR_IS_VISUAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INSPECTOR_VISUAL))
#define GTK_INSPECTOR_IS_VISUAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_INSPECTOR_VISUAL))
#define GTK_INSPECTOR_VISUAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_INSPECTOR_VISUAL, GtkInspectorVisualClass))
typedef struct _GtkInspectorVisual GtkInspectorVisual;
typedef struct _GtkInspectorVisualPrivate GtkInspectorVisualPrivate;
typedef struct _GtkInspectorVisual
{
GtkWidget parent;
GtkInspectorVisualPrivate *priv;
} GtkInspectorVisual;
typedef struct _GtkInspectorVisualClass
{
GtkWidgetClass parent_class;
} GtkInspectorVisualClass;
G_BEGIN_DECLS
+30
View File
@@ -560,6 +560,35 @@
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<child>
<object class="GtkBox">
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">10</property>
<property name="margin-bottom">10</property>
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="resize_label">
<property name="label" translatable="yes">Show Widget Resizes</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="resize_switch">
<property name="halign">end</property>
<property name="valign">baseline</property>
<property name="hexpand">1</property>
<signal name="notify::active" handler="widget_resize_activate"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<child>
@@ -683,6 +712,7 @@
<widget name="fallback_label"/>
<widget name="baselines_label"/>
<widget name="layout_label"/>
<widget name="resize_label"/>
<widget name="focus_label"/>
<widget name="touchscreen_label"/>
<widget name="software_gl_label"/>
+2 -1
View File
@@ -226,6 +226,8 @@ gtk_inspector_window_init (GtkInspectorWindow *iw)
iw,
NULL);
gtk_window_set_hide_on_close (GTK_WINDOW (iw), TRUE);
gtk_window_group_add_window (gtk_window_group_new (), GTK_WINDOW (iw));
extension_point = g_io_extension_point_lookup ("gtk-inspector-page");
@@ -300,7 +302,6 @@ gtk_inspector_window_dispose (GObject *object)
g_object_set_data (G_OBJECT (iw->inspected_display), "-gtk-inspector", NULL);
g_clear_pointer (&iw->top_stack, gtk_widget_unparent);
g_clear_object (&iw->flash_overlay);
g_clear_pointer (&iw->objects, g_array_unref);
+24
View File
@@ -1465,6 +1465,30 @@ headerbar {
}
}
.background:not(.tiled):not(.maximized):not(.solid-csd) .titlebar,
.background:not(.tiled-top):not(.maximized):not(.solid-csd) .titlebar,
.background:not(.tiled-left):not(.maximized):not(.solid-csd) .titlebar,
.background:not(.tiled-right):not(.maximized):not(.solid-csd) .titlebar,
.background:not(.tiled-bottom):not(.maximized):not(.solid-csd) .titlebar {
&:backdrop, & {
border-top-left-radius: 7px;
border-top-right-radius: 7px;
}
}
headerbar { // headerbar border rounding
window:not(.tiled):not(.maximized):not(.fullscreen):not(.solid-csd) separator:first-child + &, // tackles the paned container case
window:not(.tiled):not(.maximized):not(.fullscreen):not(.solid-csd) &:first-child { &:backdrop, & { border-top-left-radius: 7px; }}
window:not(.tiled):not(.maximized):not(.fullscreen):not(.solid-csd) &:last-child { &:backdrop, & { border-top-right-radius: 7px; }}
window:not(.tiled):not(.maximized):not(.fullscreen):not(.solid-csd) stack & { // tackles the stacked headerbars case
&:first-child, &:last-child {
&:backdrop, & {
border-top-left-radius: 7px;
border-top-right-radius: 7px;
}
}
}
}
.titlebar:not(headerbar) {
window.csd > & {
-1
View File
@@ -1,6 +1,5 @@
gtk_tests = [
# testname, optional extra sources
['testrange'],
['testdropdown'],
['rendernode'],
['rendernode-create-tests'],
+7 -2
View File
@@ -687,6 +687,7 @@ main (int argc, char *argv[])
GListModel *dirmodel;
GtkTreeListModel *tree;
GtkFilterListModel *filter;
GtkSelectionModel *selection;
GtkFilter *custom_filter;
GtkSortListModel *sort;
GtkSorter *sorter;
@@ -761,7 +762,9 @@ main (int argc, char *argv[])
g_signal_connect (search_entry, "search-changed", G_CALLBACK (search_changed_cb), custom_filter);
g_object_unref (custom_filter);
gtk_column_view_set_model (GTK_COLUMN_VIEW (view), G_LIST_MODEL (filter));
selection = GTK_SELECTION_MODEL (gtk_single_selection_new (G_LIST_MODEL (filter)));
gtk_column_view_set_model (GTK_COLUMN_VIEW (view), selection);
g_object_unref (selection);
statusbar = gtk_statusbar_new ();
gtk_widget_add_tick_callback (statusbar, (GtkTickCallback) update_statusbar, NULL, NULL);
@@ -776,7 +779,9 @@ main (int argc, char *argv[])
list = gtk_list_view_new_with_factory (
gtk_builder_list_item_factory_new_from_bytes (scope, g_bytes_new_static (factory_ui, strlen (factory_ui))));
gtk_list_view_set_model (GTK_LIST_VIEW (list), gtk_column_view_get_columns (GTK_COLUMN_VIEW (view)));
selection = GTK_SELECTION_MODEL (gtk_single_selection_new (gtk_column_view_get_columns (GTK_COLUMN_VIEW (view))));
gtk_list_view_set_model (GTK_LIST_VIEW (list), selection);
g_object_unref (selection);
gtk_box_append (GTK_BOX (hbox), list);
g_object_unref (scope);
+13 -4
View File
@@ -309,6 +309,7 @@ main (int argc, char *argv[])
GtkWidget *list;
GtkWidget *cv;
GListModel *model;
GtkSelectionModel *selection;
GtkListItemFactory *factory;
gtk_init ();
@@ -349,7 +350,9 @@ main (int argc, char *argv[])
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), grid);
model = create_model (0, 400, 1, FALSE);
gtk_grid_view_set_model (GTK_GRID_VIEW (grid), model);
selection = GTK_SELECTION_MODEL (gtk_single_selection_new (model));
gtk_grid_view_set_model (GTK_GRID_VIEW (grid), selection);
g_object_unref (selection);
g_object_unref (model);
factory = gtk_signal_list_item_factory_new ();
@@ -369,7 +372,9 @@ main (int argc, char *argv[])
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), list);
model = create_model (0, 400, 1, FALSE);
gtk_list_view_set_model (GTK_LIST_VIEW (list), model);
selection = GTK_SELECTION_MODEL (gtk_single_selection_new (model));
gtk_list_view_set_model (GTK_LIST_VIEW (list), selection);
g_object_unref (selection);
g_object_unref (model);
factory = gtk_signal_list_item_factory_new ();
@@ -388,7 +393,9 @@ main (int argc, char *argv[])
cv = gtk_column_view_new ();
model = create_model (0, 400, 1, FALSE);
gtk_column_view_set_model (GTK_COLUMN_VIEW (cv), model);
selection = GTK_SELECTION_MODEL (gtk_single_selection_new (model));
gtk_column_view_set_model (GTK_COLUMN_VIEW (cv), selection);
g_object_unref (selection);
g_object_unref (model);
for (guint i = 0; i < 20; i++)
@@ -419,7 +426,9 @@ main (int argc, char *argv[])
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), list);
model = create_tree_model (20, 20);
gtk_list_view_set_model (GTK_LIST_VIEW (list), model);
selection = GTK_SELECTION_MODEL (gtk_single_selection_new (model));
gtk_list_view_set_model (GTK_LIST_VIEW (list), selection);
g_object_unref (selection);
g_object_unref (model);
factory = gtk_signal_list_item_factory_new ();
+4 -1
View File
@@ -116,6 +116,7 @@ main (int argc,
GListStore *store;
GListModel *toplevels;
GtkSortListModel *sort;
GtkSelectionModel *selection;
GtkSorter *sorter;
guint i;
GtkListItemFactory *factory;
@@ -167,7 +168,9 @@ main (int argc,
listbox = gtk_list_box_new ();
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), listbox);
gtk_list_view_set_model (GTK_LIST_VIEW (listview), G_LIST_MODEL (sort));
selection = GTK_SELECTION_MODEL (gtk_single_selection_new (G_LIST_MODEL (sort)));
gtk_list_view_set_model (GTK_LIST_VIEW (listview), selection);
g_object_unref (selection);
gtk_list_box_bind_model (GTK_LIST_BOX (listbox),
G_LIST_MODEL (sort),
create_widget_for_listbox,
+1 -1
View File
@@ -645,7 +645,7 @@ main (int argc, char *argv[])
selectionmodel = file_info_selection_new (G_LIST_MODEL (filter));
g_object_unref (filter);
gtk_list_view_set_model (GTK_LIST_VIEW (listview), G_LIST_MODEL (selectionmodel));
gtk_list_view_set_model (GTK_LIST_VIEW (listview), GTK_SELECTION_MODEL (selectionmodel));
statusbar = gtk_statusbar_new ();
gtk_widget_add_tick_callback (statusbar, (GtkTickCallback) update_statusbar, NULL, NULL);
-658
View File
@@ -1,658 +0,0 @@
#include <gtk/gtk.h>
G_DECLARE_FINAL_TYPE (DemoSlider, demo_slider, DEMO, SLIDER, GtkWidget)
struct _DemoSlider
{
GtkWidget parent_instance;
};
struct _DemoSliderClass
{
GtkWidgetClass parent_class;
};
G_DECLARE_FINAL_TYPE (DemoHighlight, demo_highlight, DEMO, HIGHLIGHT, GtkWidget)
struct _DemoHighlight
{
GtkWidget parent_instance;
};
struct _DemoHighlightClass
{
GtkWidgetClass parent_class;
};
G_DECLARE_FINAL_TYPE (DemoTrough, demo_trough, DEMO, TROUGH, GtkWidget)
struct _DemoTrough
{
GtkWidget parent_instance;
};
struct _DemoTroughClass
{
GtkWidgetClass parent_class;
};
G_DECLARE_FINAL_TYPE (DemoWidget, demo_widget, DEMO, WIDGET, GtkWidget)
struct _DemoWidget
{
GtkWidget parent_instance;
GtkWidget *trough;
GtkWidget *highlight;
GtkWidget *min_slider;
GtkWidget *max_slider;
GtkWidget *grab_location;
double range_min;
double range_max;
double min_value;
double max_value;
gboolean shift;
};
enum
{
PROP_RANGE_MIN = 1,
PROP_RANGE_MAX,
PROP_MIN_VALUE,
PROP_MAX_VALUE,
NUM_PROPERTIES
};
static GParamSpec *properties[NUM_PROPERTIES] = { NULL };
struct _DemoWidgetClass
{
GtkWidgetClass parent_class;
};
G_DEFINE_TYPE (DemoSlider, demo_slider, GTK_TYPE_WIDGET)
static void
demo_slider_init (DemoSlider *slider)
{
}
static void
demo_slider_class_init (DemoSliderClass *class)
{
gtk_widget_class_set_css_name (GTK_WIDGET_CLASS (class), "slider");
}
static GtkWidget *
demo_slider_new (void)
{
return g_object_new (demo_slider_get_type (), NULL);
}
G_DEFINE_TYPE (DemoHighlight, demo_highlight, GTK_TYPE_WIDGET)
static void
demo_highlight_init (DemoHighlight *highlight)
{
}
static void
demo_highlight_class_init (DemoHighlightClass *class)
{
gtk_widget_class_set_css_name (GTK_WIDGET_CLASS (class), "highlight");
}
static GtkWidget *
demo_highlight_new (void)
{
return g_object_new (demo_highlight_get_type (), NULL);
}
G_DEFINE_TYPE (DemoTrough, demo_trough, GTK_TYPE_WIDGET)
static void
demo_trough_init (DemoTrough *trough)
{
}
static void
demo_trough_measure (GtkWidget *widget,
GtkOrientation orientation,
int for_size,
int *minimum,
int *natural,
int *minimum_baseline,
int *natural_baseline)
{
DemoWidget *demo = DEMO_WIDGET (gtk_widget_get_parent (widget));
int min1, nat1;
int min2, nat2;
int min3, nat3;
gtk_widget_measure (demo->min_slider,
orientation, -1,
&min1, &nat1,
NULL, NULL);
gtk_widget_measure (demo->max_slider,
orientation, -1,
&min2, &nat2,
NULL, NULL);
gtk_widget_measure (demo->highlight,
orientation, for_size,
&min3, &nat3,
NULL, NULL);
if (orientation == GTK_ORIENTATION_HORIZONTAL)
{
*minimum = MAX (min1 + min2, min3);
*natural = MAX (nat1 + nat2, nat3);
}
else
{
*minimum = MAX (MAX (min1, min2), min3);
*natural = MAX (MAX (nat1, nat2), min3);
}
}
static void
allocate_slider (DemoWidget *demo,
GtkWidget *slider,
int x)
{
int trough_height;
int width, height;
int y;
gtk_widget_measure (slider,
GTK_ORIENTATION_HORIZONTAL, -1,
&width, NULL,
NULL, NULL);
gtk_widget_measure (slider,
GTK_ORIENTATION_VERTICAL, -1,
&height, NULL,
NULL, NULL);
trough_height = gtk_widget_get_height (demo->trough);
y = floor ((trough_height - height) / 2);
gtk_widget_size_allocate (slider,
&(GtkAllocation) { x, y, width, height},
-1);
}
static void
demo_trough_size_allocate (GtkWidget *widget,
int width,
int height,
int baseline)
{
DemoWidget *demo = DEMO_WIDGET (gtk_widget_get_parent (widget));
int min, max;
min = floor (width * (demo->min_value - demo->range_min) / (demo->range_max - demo->range_min));
max = floor (width * (demo->max_value - demo->range_min) / (demo->range_max - demo->range_min));
allocate_slider (demo, demo->min_slider, min);
allocate_slider (demo, demo->max_slider, max);
gtk_widget_size_allocate (demo->highlight,
&(GtkAllocation) { min, 0, max - min, height},
-1);
}
static void
demo_trough_class_init (DemoTroughClass *class)
{
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
widget_class->measure = demo_trough_measure;
widget_class->size_allocate = demo_trough_size_allocate;
gtk_widget_class_set_css_name (widget_class, "trough");
}
static GtkWidget *
demo_trough_new (void)
{
return g_object_new (demo_trough_get_type (), NULL);
}
G_DEFINE_TYPE (DemoWidget, demo_widget, GTK_TYPE_WIDGET)
static void
click_gesture_pressed (GtkGestureClick *gesture,
guint n_press,
double x,
double y,
DemoWidget *demo)
{
guint button;
GdkModifierType state;
demo->grab_location = gtk_widget_pick (GTK_WIDGET (demo), x, y, 0);
button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
state = gtk_event_controller_get_current_event_state (GTK_EVENT_CONTROLLER (gesture));
demo->shift = (button == GDK_BUTTON_PRIMARY && ((state & GDK_SHIFT_MASK) != 0)) ||
button == GDK_BUTTON_SECONDARY;
}
static void
click_gesture_released (GtkGestureClick *gesture,
guint n_press,
double x,
double y,
DemoWidget *demo)
{
demo->grab_location = NULL;
}
static void
drag_gesture_begin (GtkGestureDrag *gesture,
double offset_x,
double offset_y,
DemoWidget *demo)
{
if (demo->grab_location == demo->min_slider ||
demo->grab_location == demo->max_slider)
gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
}
static void
drag_gesture_update (GtkGestureDrag *gesture,
double offset_x,
double offset_y,
DemoWidget *demo)
{
double start_x, start_y;
int width;
double value;
double size;
gtk_gesture_drag_get_start_point (gesture, &start_x, &start_y);
width = gtk_widget_get_width (GTK_WIDGET (demo));
value = ((start_x + offset_x) / width) * (demo->range_max - demo->range_min) + demo->range_min;
value = CLAMP (value, demo->range_min, demo->range_max);
size = demo->max_value - demo->min_value;
if (demo->shift)
{
if (demo->grab_location == demo->min_slider)
{
demo->max_value = MIN (demo->range_max, value + size);
demo->min_value = demo->max_value - size;
}
else if (demo->grab_location == demo->max_slider)
{
demo->min_value = MAX (demo->range_min, value - size);
demo->max_value = demo->min_value + size;
}
}
else
{
if (demo->grab_location == demo->min_slider)
{
demo->min_value = value;
demo->max_value = MAX (demo->max_value, value);
}
else if (demo->grab_location == demo->max_slider)
{
demo->min_value = MIN (demo->min_value, value);
demo->max_value = value;
}
}
g_object_notify_by_pspec (G_OBJECT (demo), properties[PROP_MIN_VALUE]);
g_object_notify_by_pspec (G_OBJECT (demo), properties[PROP_MAX_VALUE]);
gtk_widget_queue_allocate (GTK_WIDGET (demo));
}
static void
demo_widget_init (DemoWidget *demo)
{
GtkGesture *click_gesture, *drag_gesture;
demo->range_min = 0;
demo->range_max = 0;
demo->min_value = 0;
demo->max_value = 0;
demo->trough = demo_trough_new ();
gtk_widget_set_parent (demo->trough, GTK_WIDGET (demo));
demo->highlight = demo_highlight_new ();
gtk_widget_set_parent (demo->highlight, demo->trough);
demo->min_slider = demo_slider_new ();
gtk_widget_set_parent (demo->min_slider, demo->trough);
demo->max_slider = demo_slider_new ();
gtk_widget_set_parent (demo->max_slider, demo->trough);
drag_gesture = gtk_gesture_drag_new ();
gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (drag_gesture), 0);
g_signal_connect (drag_gesture, "drag-begin", G_CALLBACK (drag_gesture_begin), demo);
g_signal_connect (drag_gesture, "drag-update", G_CALLBACK (drag_gesture_update), demo);
gtk_widget_add_controller (GTK_WIDGET (demo), GTK_EVENT_CONTROLLER (drag_gesture));
click_gesture = gtk_gesture_click_new ();
gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (click_gesture), 0);
g_signal_connect (click_gesture, "pressed", G_CALLBACK (click_gesture_pressed), demo);
g_signal_connect (click_gesture, "released", G_CALLBACK (click_gesture_released), demo);
gtk_widget_add_controller (GTK_WIDGET (demo), GTK_EVENT_CONTROLLER (click_gesture));
gtk_gesture_group (click_gesture, drag_gesture);
}
static void
demo_widget_measure (GtkWidget *widget,
GtkOrientation orientation,
int for_size,
int *minimum,
int *natural,
int *minimum_baseline,
int *natural_baseline)
{
DemoWidget *demo = DEMO_WIDGET (widget);
gtk_widget_measure (demo->trough,
orientation, -1,
minimum, natural,
NULL, NULL);
}
static void
demo_widget_size_allocate (GtkWidget *widget,
int width,
int height,
int baseline)
{
DemoWidget *demo = DEMO_WIDGET (widget);
int min_height;
gtk_widget_measure (demo->trough,
GTK_ORIENTATION_VERTICAL, -1,
&min_height, NULL,
NULL, NULL);
gtk_widget_size_allocate (demo->trough,
&(GtkAllocation) { 0, 0, width, min_height},
-1);
}
static void
demo_widget_dispose (GObject *object)
{
DemoWidget *demo = DEMO_WIDGET (object);
g_clear_pointer (&demo->trough, gtk_widget_unparent);
G_OBJECT_CLASS (demo_widget_parent_class)->dispose (object);
}
static void
demo_widget_set_range (DemoWidget *demo,
double range_min,
double range_max)
{
double value;
g_return_if_fail (range_min <= range_max);
g_object_freeze_notify (G_OBJECT (demo));
if (demo->range_min != range_min)
{
demo->range_min = range_min;
g_object_notify_by_pspec (G_OBJECT (demo), properties[PROP_RANGE_MIN]);
}
if (demo->range_max != range_max)
{
demo->range_max = range_max;
g_object_notify_by_pspec (G_OBJECT (demo), properties[PROP_RANGE_MAX]);
}
value = CLAMP (demo->min_value, range_min, range_max);
if (demo->min_value != value)
{
demo->min_value = value;
g_object_notify_by_pspec (G_OBJECT (demo), properties[PROP_MIN_VALUE]);
}
value = CLAMP (demo->max_value, range_min, range_max);
if (demo->max_value != value)
{
demo->max_value = value;
g_object_notify_by_pspec (G_OBJECT (demo), properties[PROP_MAX_VALUE]);
}
g_object_thaw_notify (G_OBJECT (demo));
}
static void
demo_widget_set_values (DemoWidget *demo,
double min_value,
double max_value)
{
double value;
g_return_if_fail (min_value <= max_value);
g_object_freeze_notify (G_OBJECT (demo));
value = CLAMP (min_value, demo->range_min, demo->range_max);
if (demo->min_value != value)
{
demo->min_value = value;
g_object_notify_by_pspec (G_OBJECT (demo), properties[PROP_MIN_VALUE]);
}
value = CLAMP (max_value, demo->range_min, demo->range_max);
if (demo->max_value != value)
{
demo->max_value = value;
g_object_notify_by_pspec (G_OBJECT (demo), properties[PROP_MAX_VALUE]);
}
g_object_thaw_notify (G_OBJECT (demo));
}
static void
demo_widget_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
DemoWidget *demo = DEMO_WIDGET (object);
double v;
switch (prop_id)
{
case PROP_RANGE_MIN:
v = g_value_get_double (value);
demo_widget_set_range (demo, v, MAX (v, demo->range_max));
break;
case PROP_RANGE_MAX:
v = g_value_get_double (value);
demo_widget_set_range (demo, MIN (v, demo->range_min), v);
break;
case PROP_MIN_VALUE:
v = g_value_get_double (value);
demo_widget_set_values (demo, v, MAX (v, demo->max_value));
break;
case PROP_MAX_VALUE:
v = g_value_get_double (value);
demo_widget_set_values (demo, MIN (v, demo->min_value), v);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
demo_widget_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
DemoWidget *demo = DEMO_WIDGET (object);
switch (prop_id)
{
case PROP_RANGE_MIN:
g_value_set_double (value, demo->range_min);
break;
case PROP_RANGE_MAX:
g_value_set_double (value, demo->range_max);
break;
case PROP_MIN_VALUE:
g_value_set_double (value, demo->min_value);
break;
case PROP_MAX_VALUE:
g_value_set_double (value, demo->max_value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
demo_widget_class_init (DemoWidgetClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
object_class->dispose = demo_widget_dispose;
object_class->set_property = demo_widget_set_property;
object_class->get_property = demo_widget_get_property;
widget_class->measure = demo_widget_measure;
widget_class->size_allocate = demo_widget_size_allocate;
properties[PROP_RANGE_MIN] = g_param_spec_double ("range-min",
"Range Min",
"Range Min",
-G_MAXDOUBLE, G_MAXDOUBLE, 0,
G_PARAM_READWRITE);
properties[PROP_RANGE_MAX] = g_param_spec_double ("range-max",
"Range Max",
"Range Max",
-G_MAXDOUBLE, G_MAXDOUBLE, 0,
G_PARAM_READWRITE);
properties[PROP_MIN_VALUE] = g_param_spec_double ("min-value",
"Min Value",
"Min Value",
-G_MAXDOUBLE, G_MAXDOUBLE, 0,
G_PARAM_READWRITE);
properties[PROP_MAX_VALUE] = g_param_spec_double ("max-value",
"Max Value",
"Max Value",
-G_MAXDOUBLE, G_MAXDOUBLE, 0,
G_PARAM_READWRITE);
gtk_widget_class_set_css_name (widget_class, "scale");
}
static GtkWidget *
demo_widget_new (void)
{
return g_object_new (demo_widget_get_type (), NULL);
}
static void
update_range_label (GObject *object,
GParamSpec *pspec,
gpointer data)
{
DemoWidget *demo = DEMO_WIDGET (object);
if (pspec->name == g_intern_static_string ("range-min") ||
pspec->name == g_intern_static_string ("range-max"))
{
char *text;
text = g_strdup_printf ("Allowed values: [%.1f, %.1f]\n", demo->range_min, demo->range_max);
gtk_label_set_label (GTK_LABEL (data), text);
g_free (text);
}
}
static void
update_values_label (GObject *object,
GParamSpec *pspec,
gpointer data)
{
DemoWidget *demo = DEMO_WIDGET (object);
if (pspec->name == g_intern_static_string ("min-value") ||
pspec->name == g_intern_static_string ("max-value"))
{
char *text;
text = g_strdup_printf ("Selected range: [%.1f, %.1f]\n", demo->min_value, demo->max_value);
gtk_label_set_label (GTK_LABEL (data), text);
g_free (text);
}
}
int
main (int argc, char *argv[])
{
GtkWindow *window;
GtkWidget *box;
GtkWidget *demo;
GtkWidget *label;
gtk_init ();
window = GTK_WINDOW (gtk_window_new ());
gtk_window_set_title (window, "Pick a range");
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
gtk_window_set_child (window, box);
demo = demo_widget_new ();
gtk_widget_set_halign (demo, GTK_ALIGN_FILL);
gtk_widget_set_valign (demo, GTK_ALIGN_CENTER);
gtk_widget_set_hexpand (demo, TRUE);
gtk_box_append (GTK_BOX (box), demo);
label = gtk_label_new ("");
gtk_label_set_xalign (GTK_LABEL (label), 0);
g_signal_connect (demo, "notify", G_CALLBACK (update_range_label), label);
gtk_box_append (GTK_BOX (box), label);
label = gtk_label_new ("");
gtk_label_set_xalign (GTK_LABEL (label), 0);
g_signal_connect (demo, "notify", G_CALLBACK (update_values_label), label);
gtk_box_append (GTK_BOX (box), label);
demo_widget_set_range (DEMO_WIDGET (demo), 0, 1000);
demo_widget_set_values (DEMO_WIDGET (demo), 100, 500);
gtk_window_present (window);
while (g_list_model_get_n_items (gtk_window_get_toplevels ()) > 0)
g_main_context_iteration (NULL, TRUE);
return 0;
}
+2 -2
View File
@@ -320,7 +320,7 @@ main (int argc, char **argv)
gtk_button_set_label (GTK_BUTTON (toggle_button), "Picking");
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle_button), do_picking);
g_signal_connect (toggle_button, "toggled", G_CALLBACK (toggled_cb), NULL);
gtk_header_bar_pack_start (GTK_HEADER_BAR (titlebar), toggle_button);
gtk_box_append (GTK_BOX (titlebar), toggle_button);
test_widget = gtk_button_new ();
gtk_widget_set_size_request (test_widget, TEST_WIDGET_MIN_SIZE, TEST_WIDGET_MIN_SIZE);
@@ -332,7 +332,7 @@ main (int argc, char **argv)
gtk_widget_set_halign (test_child, GTK_ALIGN_CENTER);
gtk_widget_set_valign (test_child, GTK_ALIGN_CENTER);
gtk_widget_set_size_request (test_child, TEST_WIDGET_MIN_SIZE / 2, TEST_WIDGET_MIN_SIZE / 2);
gtk_button_set_child (GTK_BUTTON (test_widget), test_child);
gtk_box_append (GTK_BOX (test_widget), test_child);
gtk_transform_tester_set_test_widget (GTK_TRANSFORM_TESTER (transform_tester), test_widget);
+43 -43
View File
@@ -1,48 +1,48 @@
transform {
transform: scale(8);
child:container {
transform: scale(8);
child:container {
rounded-clip {
clip: 0 0 50 50 / 30 0 0 0;
child: rounded-clip {
clip: 0 0 100 100 / 0;
child: color {
bounds: 0 0 50 50;
color: teal;
}
}
rounded-clip {
clip: 0 0 50 50 / 30 0 0 0;
child: rounded-clip {
clip: 0 0 100 100 / 0;
child: color {
bounds: 0 0 50 50;
color: teal;
}
debug {
message: "Clipped-out area";
child: container {
color {
color: black;
bounds: 0 16 5 14;
}
color {
color: black;
bounds: 3 12 5 5;
}
color {
color: black;
bounds: 6 7 5 5;
}
color {
color: black;
bounds: 10 3 5 5;
}
color {
color: black;
bounds: 15 0 5 5;
}
color {
color: black;
bounds: 19 0 14 2;
}
}
}
}
}
debug {
message: "Clipped-out area";
child: container {
color {
color: black;
bounds: 0 16 5 14;
}
color {
color: black;
bounds: 3 12 5 5;
}
color {
color: black;
bounds: 6 7 5 5;
}
color {
color: black;
bounds: 10 3 5 5;
}
color {
color: black;
bounds: 15 0 5 5;
}
color {
color: black;
bounds: 19 0 14 2;
}
}
}
}
}