Merge branch 'wip/baedert/for-master' into 'master'
wip/baedert/for-master See merge request GNOME/gtk!1466
This commit is contained in:
@@ -2531,7 +2531,6 @@ gtk_statusbar_push
|
||||
gtk_statusbar_pop
|
||||
gtk_statusbar_remove
|
||||
gtk_statusbar_remove_all
|
||||
gtk_statusbar_get_message_area
|
||||
<SUBSECTION Standard>
|
||||
GTK_STATUSBAR
|
||||
GTK_IS_STATUSBAR
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
#include <string.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include "gtkstatusbarprivate.h"
|
||||
#include "gtkstatusbaraccessible.h"
|
||||
|
||||
|
||||
@@ -51,50 +52,11 @@ gtk_statusbar_accessible_initialize (AtkObject *obj,
|
||||
obj->role = ATK_ROLE_STATUSBAR;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
find_label_child (GtkContainer *container)
|
||||
{
|
||||
GList *children, *tmp_list;
|
||||
GtkWidget *child;
|
||||
|
||||
children = gtk_container_get_children (container);
|
||||
|
||||
child = NULL;
|
||||
for (tmp_list = children; tmp_list != NULL; tmp_list = tmp_list->next)
|
||||
{
|
||||
if (GTK_IS_LABEL (tmp_list->data))
|
||||
{
|
||||
child = GTK_WIDGET (tmp_list->data);
|
||||
break;
|
||||
}
|
||||
else if (GTK_IS_CONTAINER (tmp_list->data))
|
||||
{
|
||||
child = find_label_child (GTK_CONTAINER (tmp_list->data));
|
||||
if (child)
|
||||
break;
|
||||
}
|
||||
}
|
||||
g_list_free (children);
|
||||
|
||||
return child;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
get_label_from_statusbar (GtkStatusbar *statusbar)
|
||||
{
|
||||
GtkWidget *box;
|
||||
|
||||
box = gtk_statusbar_get_message_area (statusbar);
|
||||
|
||||
return find_label_child (GTK_CONTAINER (box));
|
||||
}
|
||||
|
||||
static const gchar *
|
||||
gtk_statusbar_accessible_get_name (AtkObject *obj)
|
||||
{
|
||||
const gchar *name;
|
||||
GtkWidget *widget;
|
||||
GtkWidget *label;
|
||||
|
||||
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
|
||||
if (widget == NULL)
|
||||
@@ -104,11 +66,7 @@ gtk_statusbar_accessible_get_name (AtkObject *obj)
|
||||
if (name != NULL)
|
||||
return name;
|
||||
|
||||
label = get_label_from_statusbar (GTK_STATUSBAR (widget));
|
||||
if (GTK_IS_LABEL (label))
|
||||
return gtk_label_get_label (GTK_LABEL (label));
|
||||
|
||||
return NULL;
|
||||
return gtk_statusbar_get_message (GTK_STATUSBAR (widget));
|
||||
}
|
||||
|
||||
static gint
|
||||
|
||||
@@ -230,7 +230,7 @@ _gtk_color_chooser_snapshot_checkered_pattern (GtkSnapshot *snapshot,
|
||||
int height)
|
||||
{
|
||||
const GdkRGBA color1 = GDK_RGBA("A8A8A8");
|
||||
const GdkRGBA color2 = GDK_RGBA("545445");
|
||||
const GdkRGBA color2 = GDK_RGBA("545454");
|
||||
|
||||
gtk_snapshot_push_repeat (snapshot, &GRAPHENE_RECT_INIT (0, 0, width, height), NULL);
|
||||
gtk_snapshot_append_color (snapshot, &color1, &GRAPHENE_RECT_INIT (0, 0, 10, 10));
|
||||
|
||||
@@ -803,20 +803,16 @@ add_custom_color (GtkColorChooserWidget *cc,
|
||||
const GdkRGBA *color)
|
||||
{
|
||||
GtkColorChooserWidgetPrivate *priv = gtk_color_chooser_widget_get_instance_private (cc);
|
||||
GtkWidget *last;
|
||||
GtkWidget *p;
|
||||
GList *children;
|
||||
|
||||
children = gtk_container_get_children (GTK_CONTAINER (priv->custom));
|
||||
if (g_list_length (children) >= 9)
|
||||
{
|
||||
last = g_list_last (children)->data;
|
||||
if (last == GTK_WIDGET (priv->current))
|
||||
priv->current = NULL;
|
||||
GtkWidget *last = gtk_widget_get_last_child (priv->custom);
|
||||
|
||||
gtk_widget_destroy (last);
|
||||
gtk_container_remove (GTK_CONTAINER (priv->custom), last);
|
||||
}
|
||||
|
||||
g_list_free (children);
|
||||
|
||||
p = gtk_color_swatch_new ();
|
||||
|
||||
@@ -210,13 +210,13 @@ add_recent_item (GtkEmojiChooser *chooser,
|
||||
|
||||
if (modifier == modifier2 && g_variant_equal (item, item2))
|
||||
{
|
||||
gtk_widget_destroy (GTK_WIDGET (l->data));
|
||||
gtk_container_remove (GTK_CONTAINER (chooser->recent.box), l->data);
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
if (i >= MAX_RECENT)
|
||||
{
|
||||
gtk_widget_destroy (GTK_WIDGET (l->data));
|
||||
gtk_container_remove (GTK_CONTAINER (chooser->recent.box), l->data);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -414,7 +414,8 @@ add_emoji (GtkWidget *box,
|
||||
if (pango_layout_get_unknown_glyphs_count (layout) > 0 ||
|
||||
rect.width >= 1.5 * chooser->emoji_max_width)
|
||||
{
|
||||
gtk_widget_destroy (label);
|
||||
g_object_ref_sink (label);
|
||||
g_object_unref (label);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -383,11 +383,11 @@ _gtk_header_bar_update_window_buttons (GtkHeaderBar *bar)
|
||||
priv->titlebar_icon = button;
|
||||
gtk_widget_add_css_class (button, "titlebutton");
|
||||
gtk_widget_add_css_class (button, "icon");
|
||||
gtk_widget_set_size_request (button, 20, 20);
|
||||
|
||||
if (!_gtk_header_bar_update_window_icon (bar, window))
|
||||
{
|
||||
gtk_widget_destroy (button);
|
||||
g_object_ref_sink (button);
|
||||
g_object_unref (button);
|
||||
priv->titlebar_icon = NULL;
|
||||
button = NULL;
|
||||
}
|
||||
@@ -802,7 +802,7 @@ gtk_header_bar_dispose (GObject *object)
|
||||
|
||||
if (priv->label_sizing_box)
|
||||
{
|
||||
gtk_widget_destroy (priv->label_sizing_box);
|
||||
g_object_ref_sink (priv->label_sizing_box);
|
||||
g_clear_object (&priv->label_sizing_box);
|
||||
}
|
||||
|
||||
|
||||
@@ -222,7 +222,8 @@ gtk_menu_section_box_remove_func (gint position,
|
||||
gtk_container_remove (GTK_CONTAINER (stack), subbox);
|
||||
}
|
||||
|
||||
gtk_widget_destroy (g_list_nth_data (children, position));
|
||||
gtk_container_remove (GTK_CONTAINER (box->item_box),
|
||||
g_list_nth_data (children, position));
|
||||
g_list_free (children);
|
||||
|
||||
gtk_menu_section_box_schedule_separator_sync (box);
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
* radio button.
|
||||
*
|
||||
* Model buttons are used when popovers from a menu model with
|
||||
* gtk_popover_new_from_model(); they can also be used manually in
|
||||
* gtk_popover_menu_new_from_model(); they can also be used manually in
|
||||
* a #GtkPopoverMenu.
|
||||
*
|
||||
* When the action is specified via the #GtkActionable:action-name
|
||||
|
||||
236
gtk/gtkpathbar.c
236
gtk/gtkpathbar.c
@@ -118,7 +118,7 @@ struct _ButtonData
|
||||
*/
|
||||
#define BUTTON_IS_FAKE_ROOT(button) ((button)->type == HOME_BUTTON)
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (GtkPathBar, gtk_path_bar, GTK_TYPE_CONTAINER)
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (GtkPathBar, gtk_path_bar, GTK_TYPE_WIDGET)
|
||||
|
||||
static void gtk_path_bar_finalize (GObject *object);
|
||||
static void gtk_path_bar_dispose (GObject *object);
|
||||
@@ -133,21 +133,8 @@ static void gtk_path_bar_size_allocate (GtkWidget *widget,
|
||||
int width,
|
||||
int height,
|
||||
int baseline);
|
||||
static void gtk_path_bar_add (GtkContainer *container,
|
||||
GtkWidget *widget);
|
||||
static void gtk_path_bar_remove (GtkContainer *container,
|
||||
GtkWidget *widget);
|
||||
static void gtk_path_bar_forall (GtkContainer *container,
|
||||
GtkCallback callback,
|
||||
gpointer callback_data);
|
||||
static void gtk_path_bar_scroll_up (GtkPathBar *path_bar);
|
||||
static void gtk_path_bar_scroll_down (GtkPathBar *path_bar);
|
||||
static gboolean gtk_path_bar_slider_up_defocus (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
GtkPathBar *path_bar);
|
||||
static gboolean gtk_path_bar_slider_down_defocus (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
GtkPathBar *path_bar);
|
||||
static void gtk_path_bar_update_button_appearance (GtkPathBar *path_bar,
|
||||
ButtonData *button_data,
|
||||
gboolean current_dir);
|
||||
@@ -216,13 +203,11 @@ gtk_path_bar_init (GtkPathBar *path_bar)
|
||||
|
||||
priv = gtk_path_bar_get_instance_private (path_bar);
|
||||
|
||||
gtk_widget_init_template (GTK_WIDGET (path_bar));
|
||||
priv->up_slider_button = gtk_button_new_from_icon_name ("pan-start-symbolic");
|
||||
gtk_widget_set_parent (priv->up_slider_button, GTK_WIDGET (path_bar));
|
||||
|
||||
/* Add the children manually because GtkPathBar derives from an abstract class,
|
||||
* Glade cannot edit a <template> in gtkpathbar.ui if it's only a GtkContainer.
|
||||
*/
|
||||
gtk_container_add (GTK_CONTAINER (path_bar), priv->up_slider_button);
|
||||
gtk_container_add (GTK_CONTAINER (path_bar), priv->down_slider_button);
|
||||
priv->down_slider_button = gtk_button_new_from_icon_name ("pan-end-symbolic");
|
||||
gtk_widget_set_parent (priv->down_slider_button, GTK_WIDGET (path_bar));
|
||||
|
||||
/* GtkBuilder wont let us connect 'swapped' without specifying the signal's
|
||||
* user data in the .ui file
|
||||
@@ -250,11 +235,9 @@ gtk_path_bar_class_init (GtkPathBarClass *path_bar_class)
|
||||
{
|
||||
GObjectClass *gobject_class;
|
||||
GtkWidgetClass *widget_class;
|
||||
GtkContainerClass *container_class;
|
||||
|
||||
gobject_class = (GObjectClass *) path_bar_class;
|
||||
widget_class = (GtkWidgetClass *) path_bar_class;
|
||||
container_class = (GtkContainerClass *) path_bar_class;
|
||||
|
||||
gobject_class->finalize = gtk_path_bar_finalize;
|
||||
gobject_class->dispose = gtk_path_bar_dispose;
|
||||
@@ -262,12 +245,6 @@ gtk_path_bar_class_init (GtkPathBarClass *path_bar_class)
|
||||
widget_class->measure = gtk_path_bar_measure;
|
||||
widget_class->size_allocate = gtk_path_bar_size_allocate;
|
||||
|
||||
container_class->add = gtk_path_bar_add;
|
||||
container_class->forall = gtk_path_bar_forall;
|
||||
container_class->remove = gtk_path_bar_remove;
|
||||
/* FIXME: */
|
||||
/* container_class->child_type = gtk_path_bar_child_type;*/
|
||||
|
||||
path_bar_signals [PATH_CLICKED] =
|
||||
g_signal_new (I_("path-clicked"),
|
||||
G_OBJECT_CLASS_TYPE (gobject_class),
|
||||
@@ -280,23 +257,9 @@ gtk_path_bar_class_init (GtkPathBarClass *path_bar_class)
|
||||
G_TYPE_POINTER,
|
||||
G_TYPE_BOOLEAN);
|
||||
|
||||
/* Bind class to template
|
||||
*/
|
||||
gtk_widget_class_set_template_from_resource (widget_class,
|
||||
"/org/gtk/libgtk/ui/gtkpathbar.ui");
|
||||
|
||||
gtk_widget_class_bind_template_child_private (widget_class, GtkPathBar, up_slider_button);
|
||||
gtk_widget_class_bind_template_child_private (widget_class, GtkPathBar, down_slider_button);
|
||||
|
||||
gtk_widget_class_bind_template_callback (widget_class, gtk_path_bar_slider_up_defocus);
|
||||
gtk_widget_class_bind_template_callback (widget_class, gtk_path_bar_slider_down_defocus);
|
||||
gtk_widget_class_bind_template_callback (widget_class, gtk_path_bar_scroll_up);
|
||||
gtk_widget_class_bind_template_callback (widget_class, gtk_path_bar_scroll_down);
|
||||
|
||||
gtk_widget_class_set_css_name (widget_class, "pathbar");
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gtk_path_bar_finalize (GObject *object)
|
||||
{
|
||||
@@ -324,6 +287,10 @@ gtk_path_bar_dispose (GObject *object)
|
||||
{
|
||||
GtkPathBar *path_bar = GTK_PATH_BAR (object);
|
||||
GtkPathBarPrivate *priv = gtk_path_bar_get_instance_private (path_bar);
|
||||
GtkWidget *w;
|
||||
|
||||
while ((w = gtk_widget_get_first_child (GTK_WIDGET (path_bar))) != NULL)
|
||||
gtk_widget_unparent (w);
|
||||
|
||||
priv->get_info_cancellable = NULL;
|
||||
cancel_all_cancellables (path_bar);
|
||||
@@ -331,12 +298,6 @@ gtk_path_bar_dispose (GObject *object)
|
||||
G_OBJECT_CLASS (gtk_path_bar_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
/* Size requisition:
|
||||
*
|
||||
* Ideally, our size is determined by another widget, and we are just filling
|
||||
* available space.
|
||||
*/
|
||||
|
||||
static void
|
||||
gtk_path_bar_measure (GtkWidget *widget,
|
||||
GtkOrientation orientation,
|
||||
@@ -357,7 +318,6 @@ gtk_path_bar_measure (GtkWidget *widget,
|
||||
*minimum = 0;
|
||||
*natural = 0;
|
||||
|
||||
|
||||
if (orientation == GTK_ORIENTATION_HORIZONTAL)
|
||||
{
|
||||
for (list = priv->button_list; list; list = list->next)
|
||||
@@ -703,89 +663,6 @@ gtk_path_bar_scroll_controller_scroll (GtkEventControllerScroll *scroll,
|
||||
return GDK_EVENT_STOP;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_bar_add (GtkContainer *container,
|
||||
GtkWidget *widget)
|
||||
|
||||
{
|
||||
gtk_widget_set_parent (widget, GTK_WIDGET (container));
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_bar_remove_1 (GtkContainer *container,
|
||||
GtkWidget *widget)
|
||||
{
|
||||
gboolean was_visible = gtk_widget_get_visible (widget);
|
||||
gtk_widget_unparent (widget);
|
||||
if (was_visible)
|
||||
gtk_widget_queue_resize (GTK_WIDGET (container));
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_bar_remove (GtkContainer *container,
|
||||
GtkWidget *widget)
|
||||
{
|
||||
GtkPathBar *path_bar = GTK_PATH_BAR (container);
|
||||
GtkPathBarPrivate *priv = gtk_path_bar_get_instance_private (path_bar);
|
||||
GList *children;
|
||||
|
||||
if (widget == priv->up_slider_button)
|
||||
{
|
||||
gtk_path_bar_remove_1 (container, widget);
|
||||
priv->up_slider_button = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
if (widget == priv->down_slider_button)
|
||||
{
|
||||
gtk_path_bar_remove_1 (container, widget);
|
||||
priv->down_slider_button = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
children = priv->button_list;
|
||||
while (children)
|
||||
{
|
||||
if (widget == BUTTON_DATA (children->data)->button)
|
||||
{
|
||||
gtk_path_bar_remove_1 (container, widget);
|
||||
priv->button_list = g_list_remove_link (priv->button_list, children);
|
||||
g_list_free (children);
|
||||
return;
|
||||
}
|
||||
|
||||
children = children->next;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_bar_forall (GtkContainer *container,
|
||||
GtkCallback callback,
|
||||
gpointer callback_data)
|
||||
{
|
||||
GtkPathBar *path_bar = GTK_PATH_BAR (container);
|
||||
GtkPathBarPrivate *priv = gtk_path_bar_get_instance_private (path_bar);
|
||||
GList *children;
|
||||
|
||||
g_return_if_fail (callback != NULL);
|
||||
|
||||
children = priv->button_list;
|
||||
while (children)
|
||||
{
|
||||
GtkWidget *child;
|
||||
child = BUTTON_DATA (children->data)->button;
|
||||
children = children->next;
|
||||
|
||||
(* callback) (child, callback_data);
|
||||
}
|
||||
|
||||
if (priv->up_slider_button)
|
||||
(* callback) (priv->up_slider_button, callback_data);
|
||||
|
||||
if (priv->down_slider_button)
|
||||
(* callback) (priv->down_slider_button, callback_data);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_bar_scroll_down (GtkPathBar *path_bar)
|
||||
{
|
||||
@@ -863,74 +740,25 @@ gtk_path_bar_scroll_up (GtkPathBar *path_bar)
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_path_bar_slider_up_defocus (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
GtkPathBar *path_bar)
|
||||
{
|
||||
GtkPathBarPrivate *priv = gtk_path_bar_get_instance_private (path_bar);
|
||||
GList *list;
|
||||
GList *up_button = NULL;
|
||||
|
||||
if (gdk_event_get_event_type (event) != GDK_FOCUS_CHANGE)
|
||||
return FALSE;
|
||||
|
||||
for (list = g_list_last (priv->button_list); list; list = list->prev)
|
||||
{
|
||||
if (gtk_widget_get_child_visible (BUTTON_DATA (list->data)->button))
|
||||
{
|
||||
up_button = list;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* don't let the focus vanish */
|
||||
if ((!gtk_widget_is_sensitive (priv->up_slider_button)) ||
|
||||
(!gtk_widget_get_child_visible (priv->up_slider_button)))
|
||||
gtk_widget_grab_focus (BUTTON_DATA (up_button->data)->button);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_path_bar_slider_down_defocus (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
GtkPathBar *path_bar)
|
||||
{
|
||||
GtkPathBarPrivate *priv = gtk_path_bar_get_instance_private (path_bar);
|
||||
GList *list;
|
||||
GList *down_button = NULL;
|
||||
|
||||
if (gdk_event_get_event_type (event) != GDK_FOCUS_CHANGE)
|
||||
return FALSE;
|
||||
|
||||
for (list = priv->button_list; list; list = list->next)
|
||||
{
|
||||
if (gtk_widget_get_child_visible (BUTTON_DATA (list->data)->button))
|
||||
{
|
||||
down_button = list;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* don't let the focus vanish */
|
||||
if ((!gtk_widget_is_sensitive (priv->down_slider_button)) ||
|
||||
(!gtk_widget_get_child_visible (priv->down_slider_button)))
|
||||
gtk_widget_grab_focus (BUTTON_DATA (down_button->data)->button);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Public functions and their helpers */
|
||||
static void
|
||||
gtk_path_bar_clear_buttons (GtkPathBar *path_bar)
|
||||
gtk_path_bar_clear_buttons (GtkPathBar *self)
|
||||
{
|
||||
GtkPathBarPrivate *priv = gtk_path_bar_get_instance_private (path_bar);
|
||||
GtkPathBarPrivate *priv = gtk_path_bar_get_instance_private (self);
|
||||
GtkWidget *w;
|
||||
|
||||
while (priv->button_list != NULL)
|
||||
w = gtk_widget_get_first_child (GTK_WIDGET (self));
|
||||
while (w)
|
||||
{
|
||||
gtk_container_remove (GTK_CONTAINER (path_bar), BUTTON_DATA (priv->button_list->data)->button);
|
||||
GtkWidget *next = gtk_widget_get_next_sibling (w);
|
||||
|
||||
if (w != priv->up_slider_button && w != priv->down_slider_button)
|
||||
{
|
||||
gtk_widget_unparent (w);
|
||||
}
|
||||
|
||||
w = next;
|
||||
}
|
||||
|
||||
priv->first_scrolled_button = NULL;
|
||||
priv->fake_root = NULL;
|
||||
}
|
||||
@@ -1332,23 +1160,16 @@ gtk_path_bar_set_file_finish (struct SetFileInfo *info,
|
||||
if (result)
|
||||
{
|
||||
GList *l;
|
||||
GtkCssNode *prev;
|
||||
|
||||
gtk_path_bar_clear_buttons (info->path_bar);
|
||||
priv->button_list = g_list_reverse (info->new_buttons);
|
||||
priv->fake_root = info->fake_root;
|
||||
prev = gtk_widget_get_css_node (priv->down_slider_button);
|
||||
|
||||
for (l = priv->button_list; l; l = l->next)
|
||||
{
|
||||
GtkWidget *button = BUTTON_DATA (l->data)->button;
|
||||
GtkCssNode *node = gtk_widget_get_css_node (button);
|
||||
|
||||
gtk_css_node_insert_before (gtk_widget_get_css_node (GTK_WIDGET (info->path_bar)),
|
||||
node,
|
||||
prev);
|
||||
gtk_container_add (GTK_CONTAINER (info->path_bar), button);
|
||||
prev = node;
|
||||
gtk_widget_insert_after (button, GTK_WIDGET (info->path_bar), priv->up_slider_button);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1356,12 +1177,11 @@ gtk_path_bar_set_file_finish (struct SetFileInfo *info,
|
||||
GList *l;
|
||||
|
||||
for (l = info->new_buttons; l; l = l->next)
|
||||
{
|
||||
ButtonData *button_data;
|
||||
{
|
||||
ButtonData *button_data = BUTTON_DATA (l->data);
|
||||
|
||||
button_data = BUTTON_DATA (l->data);
|
||||
gtk_widget_destroy (button_data->button);
|
||||
}
|
||||
gtk_widget_unparent (button_data->button);
|
||||
}
|
||||
|
||||
g_list_free (info->new_buttons);
|
||||
}
|
||||
|
||||
@@ -36,12 +36,12 @@ typedef struct _GtkPathBarClass GtkPathBarClass;
|
||||
|
||||
struct _GtkPathBar
|
||||
{
|
||||
GtkContainer parent_instance;
|
||||
GtkWidget parent_instance;
|
||||
};
|
||||
|
||||
struct _GtkPathBarClass
|
||||
{
|
||||
GtkContainerClass parent_class;
|
||||
GtkWidgetClass parent_class;
|
||||
|
||||
void (* path_clicked) (GtkPathBar *path_bar,
|
||||
GFile *file,
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
#include "gtksettings.h"
|
||||
#include "gtktrashmonitor.h"
|
||||
#include "gtktypebuiltins.h"
|
||||
#include "gtkpopover.h"
|
||||
#include "gtkpopovermenu.h"
|
||||
#include "gtkgrid.h"
|
||||
#include "gtklabel.h"
|
||||
#include "gtkbutton.h"
|
||||
@@ -1004,6 +1004,7 @@ update_places (GtkPlacesSidebar *sidebar)
|
||||
gchar *tooltip;
|
||||
GList *network_mounts, *network_volumes;
|
||||
GIcon *new_bookmark_icon;
|
||||
GList *children;
|
||||
#ifdef HAVE_CLOUDPROVIDERS
|
||||
GList *cloud_providers;
|
||||
GList *cloud_providers_accounts;
|
||||
@@ -1026,9 +1027,10 @@ update_places (GtkPlacesSidebar *sidebar)
|
||||
/* Reset drag state, just in case we update the places while dragging or
|
||||
* ending a drag */
|
||||
stop_drop_feedback (sidebar);
|
||||
gtk_container_foreach (GTK_CONTAINER (sidebar->list_box),
|
||||
(GtkCallback) gtk_widget_destroy,
|
||||
NULL);
|
||||
children = gtk_container_get_children (GTK_CONTAINER (sidebar->list_box));
|
||||
for (l = children; l; l = l->next)
|
||||
gtk_container_remove (GTK_CONTAINER (sidebar->list_box), l->data);
|
||||
g_list_free (children);
|
||||
|
||||
network_mounts = network_volumes = NULL;
|
||||
|
||||
@@ -1696,7 +1698,8 @@ stop_drop_feedback (GtkPlacesSidebar *sidebar)
|
||||
|
||||
if (sidebar->row_placeholder != NULL)
|
||||
{
|
||||
gtk_widget_destroy (sidebar->row_placeholder);
|
||||
if (gtk_widget_get_parent (sidebar->row_placeholder) != NULL)
|
||||
gtk_container_remove (GTK_CONTAINER (sidebar), sidebar->row_placeholder);
|
||||
sidebar->row_placeholder = NULL;
|
||||
}
|
||||
|
||||
@@ -2075,150 +2078,6 @@ check_unmount_and_eject (GMount *mount,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
check_visibility (GMount *mount,
|
||||
GVolume *volume,
|
||||
GDrive *drive,
|
||||
gboolean *show_mount,
|
||||
gboolean *show_unmount,
|
||||
gboolean *show_eject,
|
||||
gboolean *show_rescan,
|
||||
gboolean *show_start,
|
||||
gboolean *show_stop)
|
||||
{
|
||||
*show_mount = FALSE;
|
||||
*show_rescan = FALSE;
|
||||
*show_start = FALSE;
|
||||
*show_stop = FALSE;
|
||||
|
||||
check_unmount_and_eject (mount, volume, drive, show_unmount, show_eject);
|
||||
|
||||
if (drive != NULL)
|
||||
{
|
||||
if (g_drive_is_media_removable (drive) &&
|
||||
!g_drive_is_media_check_automatic (drive) &&
|
||||
g_drive_can_poll_for_media (drive))
|
||||
*show_rescan = TRUE;
|
||||
|
||||
*show_start = g_drive_can_start (drive) || g_drive_can_start_degraded (drive);
|
||||
*show_stop = g_drive_can_stop (drive);
|
||||
|
||||
if (*show_stop)
|
||||
*show_unmount = FALSE;
|
||||
}
|
||||
|
||||
if (volume != NULL)
|
||||
{
|
||||
if (mount == NULL)
|
||||
*show_mount = g_volume_can_mount (volume);
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
GtkWidget *add_shortcut_item;
|
||||
GtkWidget *remove_item;
|
||||
GtkWidget *rename_item;
|
||||
GtkWidget *separator_item;
|
||||
GtkWidget *mount_item;
|
||||
GtkWidget *unmount_item;
|
||||
GtkWidget *eject_item;
|
||||
GtkWidget *rescan_item;
|
||||
GtkWidget *start_item;
|
||||
GtkWidget *stop_item;
|
||||
} PopoverData;
|
||||
|
||||
static void
|
||||
check_popover_sensitivity (GtkSidebarRow *row,
|
||||
PopoverData *data)
|
||||
{
|
||||
gboolean show_mount;
|
||||
gboolean show_unmount;
|
||||
gboolean show_eject;
|
||||
gboolean show_rescan;
|
||||
gboolean show_start;
|
||||
gboolean show_stop;
|
||||
GtkPlacesSidebarPlaceType type;
|
||||
GDrive *drive;
|
||||
GVolume *volume;
|
||||
GMount *mount;
|
||||
GtkPlacesSidebar *sidebar;
|
||||
GAction *action;
|
||||
|
||||
g_object_get (row,
|
||||
"sidebar", &sidebar,
|
||||
"place-type", &type,
|
||||
"drive", &drive,
|
||||
"volume", &volume,
|
||||
"mount", &mount,
|
||||
NULL);
|
||||
|
||||
gtk_widget_set_visible (data->add_shortcut_item, (type == PLACES_MOUNTED_VOLUME));
|
||||
|
||||
action = g_action_map_lookup_action (G_ACTION_MAP (sidebar->row_actions), "remove");
|
||||
g_simple_action_set_enabled (G_SIMPLE_ACTION (action), (type == PLACES_BOOKMARK));
|
||||
action = g_action_map_lookup_action (G_ACTION_MAP (sidebar->row_actions), "rename");
|
||||
g_simple_action_set_enabled (G_SIMPLE_ACTION (action), (type == PLACES_BOOKMARK ||
|
||||
type == PLACES_XDG_DIR));
|
||||
action = g_action_map_lookup_action (G_ACTION_MAP (sidebar->row_actions), "open");
|
||||
g_simple_action_set_enabled (G_SIMPLE_ACTION (action), !gtk_list_box_row_is_selected (GTK_LIST_BOX_ROW (row)));
|
||||
|
||||
check_visibility (mount, volume, drive,
|
||||
&show_mount, &show_unmount, &show_eject, &show_rescan, &show_start, &show_stop);
|
||||
|
||||
gtk_widget_set_visible (data->separator_item, show_mount || show_unmount || show_eject);
|
||||
gtk_widget_set_visible (data->mount_item, show_mount);
|
||||
gtk_widget_set_visible (data->unmount_item, show_unmount);
|
||||
gtk_widget_set_visible (data->eject_item, show_eject);
|
||||
gtk_widget_set_visible (data->rescan_item, show_rescan);
|
||||
gtk_widget_set_visible (data->start_item, show_start);
|
||||
gtk_widget_set_visible (data->stop_item, show_stop);
|
||||
|
||||
/* Adjust start/stop items to reflect the type of the drive */
|
||||
g_object_set (data->start_item, "text", _("_Start"), NULL);
|
||||
g_object_set (data->stop_item, "text", _("_Stop"), NULL);
|
||||
if ((show_start || show_stop) && drive != NULL)
|
||||
{
|
||||
switch (g_drive_get_start_stop_type (drive))
|
||||
{
|
||||
case G_DRIVE_START_STOP_TYPE_SHUTDOWN:
|
||||
/* start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used */
|
||||
g_object_set (data->start_item, "text", _("_Power On"), NULL);
|
||||
g_object_set (data->stop_item, "text", _("_Safely Remove Drive"), NULL);
|
||||
break;
|
||||
|
||||
case G_DRIVE_START_STOP_TYPE_NETWORK:
|
||||
g_object_set (data->start_item, "text", _("_Connect Drive"), NULL);
|
||||
g_object_set (data->stop_item, "text", _("_Disconnect Drive"), NULL);
|
||||
break;
|
||||
|
||||
case G_DRIVE_START_STOP_TYPE_MULTIDISK:
|
||||
g_object_set (data->start_item, "text", _("_Start Multi-disk Device"), NULL);
|
||||
g_object_set (data->stop_item, "text", _("_Stop Multi-disk Device"), NULL);
|
||||
break;
|
||||
|
||||
case G_DRIVE_START_STOP_TYPE_PASSWORD:
|
||||
/* stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used */
|
||||
g_object_set (data->start_item, "text", _("_Unlock Device"), NULL);
|
||||
g_object_set (data->stop_item, "text", _("_Lock Device"), NULL);
|
||||
break;
|
||||
|
||||
default:
|
||||
case G_DRIVE_START_STOP_TYPE_UNKNOWN:
|
||||
/* uses defaults set above */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (drive)
|
||||
g_object_unref (drive);
|
||||
if (volume)
|
||||
g_object_unref (volume);
|
||||
if (mount)
|
||||
g_object_unref (mount);
|
||||
|
||||
g_object_unref (sidebar);
|
||||
}
|
||||
|
||||
static void
|
||||
drive_start_from_bookmark_cb (GObject *source_object,
|
||||
GAsyncResult *res,
|
||||
@@ -3367,67 +3226,6 @@ static GActionEntry entries[] = {
|
||||
{ "stop", stop_shortcut_cb, NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
static void
|
||||
add_actions (GtkPlacesSidebar *sidebar)
|
||||
{
|
||||
sidebar->row_actions = G_ACTION_GROUP (g_simple_action_group_new ());
|
||||
g_action_map_add_action_entries (G_ACTION_MAP (sidebar->row_actions),
|
||||
entries, G_N_ELEMENTS (entries),
|
||||
sidebar);
|
||||
gtk_widget_insert_action_group (GTK_WIDGET (sidebar), "row", sidebar->row_actions);
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
append_separator (GtkWidget *box)
|
||||
{
|
||||
GtkWidget *separator;
|
||||
|
||||
separator = g_object_new (GTK_TYPE_SEPARATOR,
|
||||
"orientation", GTK_ORIENTATION_HORIZONTAL,
|
||||
"visible", TRUE,
|
||||
"margin-top", 6,
|
||||
"margin-bottom", 6,
|
||||
NULL);
|
||||
gtk_container_add (GTK_CONTAINER (box), separator);
|
||||
|
||||
return separator;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
add_button (GtkWidget *box,
|
||||
const gchar *label,
|
||||
const gchar *action)
|
||||
{
|
||||
GtkWidget *item;
|
||||
|
||||
item = g_object_new (GTK_TYPE_MODEL_BUTTON,
|
||||
"visible", TRUE,
|
||||
"action-name", action,
|
||||
"text", label,
|
||||
NULL);
|
||||
gtk_container_add (GTK_CONTAINER (box), item);
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
add_open_button (GtkWidget *box,
|
||||
const gchar *label,
|
||||
GtkPlacesOpenFlags flags)
|
||||
{
|
||||
GtkWidget *item;
|
||||
|
||||
item = g_object_new (GTK_TYPE_MODEL_BUTTON,
|
||||
"visible", TRUE,
|
||||
"action-name", flags == GTK_PLACES_OPEN_NORMAL ? "row.open" : "row.open-other",
|
||||
"action-target", g_variant_new_int32 (flags),
|
||||
"text", label,
|
||||
NULL);
|
||||
gtk_container_add (GTK_CONTAINER (box), item);
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
static void
|
||||
on_row_popover_destroy (GtkWidget *row_popover,
|
||||
GtkPlacesSidebar *sidebar)
|
||||
@@ -3473,16 +3271,15 @@ build_popup_menu_using_gmenu (GtkSidebarRow *row)
|
||||
}
|
||||
cloud_provider_menu = cloud_providers_account_get_menu_model (cloud_provider_account);
|
||||
cloud_provider_action_group = cloud_providers_account_get_action_group (cloud_provider_account);
|
||||
if (cloud_provider_menu != NULL && cloud_provider_action_group != NULL)
|
||||
if (cloud_provider_menu != NULL && cloud_p:laurovider_action_group != NULL)
|
||||
{
|
||||
g_menu_append_section (menu, NULL, cloud_provider_menu);
|
||||
gtk_widget_insert_action_group (GTK_WIDGET (sidebar),
|
||||
"cloudprovider",
|
||||
G_ACTION_GROUP (cloud_provider_action_group));
|
||||
}
|
||||
add_actions (sidebar);
|
||||
if (sidebar->popover)
|
||||
gtk_widget_destroy (sidebar->popover);
|
||||
gtk_widget_unparent (sidebar->popover);
|
||||
|
||||
sidebar->popover = gtk_popover_new_from_model (GTK_WIDGET (sidebar),
|
||||
G_MENU_MODEL (menu));
|
||||
@@ -3499,8 +3296,24 @@ static void
|
||||
create_row_popover (GtkPlacesSidebar *sidebar,
|
||||
GtkSidebarRow *row)
|
||||
{
|
||||
PopoverData data;
|
||||
GtkWidget *box;
|
||||
GtkPlacesSidebarPlaceType type;
|
||||
GMenu *menu, *section;
|
||||
GMenuItem *item;
|
||||
GMount *mount;
|
||||
GVolume *volume;
|
||||
GDrive *drive;
|
||||
GAction *action;
|
||||
gboolean show_unmount, show_eject;
|
||||
gboolean show_stop;
|
||||
|
||||
g_object_get (row,
|
||||
"place-type", &type,
|
||||
"drive", &drive,
|
||||
"volume", &volume,
|
||||
"mount", &mount,
|
||||
NULL);
|
||||
|
||||
check_unmount_and_eject (mount, volume, drive, &show_unmount, &show_eject);
|
||||
|
||||
#ifdef HAVE_CLOUDPROVIDERS
|
||||
CloudProvidersAccount *cloud_provider_account;
|
||||
@@ -3514,42 +3327,135 @@ create_row_popover (GtkPlacesSidebar *sidebar,
|
||||
}
|
||||
#endif
|
||||
|
||||
sidebar->popover = gtk_popover_new ();
|
||||
gtk_widget_set_parent (sidebar->popover, GTK_WIDGET (sidebar));
|
||||
/* Clean sidebar pointer when its destroyed, most of the times due to its
|
||||
* relative_to associated row being destroyed */
|
||||
g_signal_connect (sidebar->popover, "destroy", G_CALLBACK (on_row_popover_destroy), sidebar);
|
||||
setup_popover_shadowing (sidebar->popover);
|
||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
g_object_set (box, "margin", 10, NULL);
|
||||
gtk_widget_show (box);
|
||||
gtk_container_add (GTK_CONTAINER (sidebar->popover), box);
|
||||
action = g_action_map_lookup_action (G_ACTION_MAP (sidebar->row_actions), "remove");
|
||||
g_simple_action_set_enabled (G_SIMPLE_ACTION (action), (type == PLACES_BOOKMARK));
|
||||
action = g_action_map_lookup_action (G_ACTION_MAP (sidebar->row_actions), "rename");
|
||||
g_simple_action_set_enabled (G_SIMPLE_ACTION (action), (type == PLACES_BOOKMARK ||
|
||||
type == PLACES_XDG_DIR));
|
||||
action = g_action_map_lookup_action (G_ACTION_MAP (sidebar->row_actions), "open");
|
||||
g_simple_action_set_enabled (G_SIMPLE_ACTION (action), !gtk_list_box_row_is_selected (GTK_LIST_BOX_ROW (row)));
|
||||
|
||||
add_open_button (box, _("_Open"), GTK_PLACES_OPEN_NORMAL);
|
||||
menu = g_menu_new ();
|
||||
section = g_menu_new ();
|
||||
|
||||
item = g_menu_item_new (_("_Open"), "row.open");
|
||||
g_menu_item_set_action_and_target_value (item, "row.open",
|
||||
g_variant_new_int32 (GTK_PLACES_OPEN_NORMAL));
|
||||
g_menu_append_item (section, item);
|
||||
g_object_unref (item);
|
||||
|
||||
if (sidebar->open_flags & GTK_PLACES_OPEN_NEW_TAB)
|
||||
add_open_button (box, _("Open in New _Tab"), GTK_PLACES_OPEN_NEW_TAB);
|
||||
{
|
||||
item = g_menu_item_new (_("_Open in New _Tab"), "row.open");
|
||||
g_menu_item_set_action_and_target_value (item, "row.open",
|
||||
g_variant_new_int32 (GTK_PLACES_OPEN_NEW_TAB));
|
||||
g_menu_append_item (section, item);
|
||||
g_object_unref (item);
|
||||
}
|
||||
|
||||
if (sidebar->open_flags & GTK_PLACES_OPEN_NEW_WINDOW)
|
||||
add_open_button (box, _("Open in New _Window"), GTK_PLACES_OPEN_NEW_WINDOW);
|
||||
{
|
||||
item = g_menu_item_new (_("_Open in New _Tab"), "row.open");
|
||||
g_menu_item_set_action_and_target_value (item, "row.open",
|
||||
g_variant_new_int32 (GTK_PLACES_OPEN_NEW_WINDOW));
|
||||
g_menu_append_item (section, item);
|
||||
g_object_unref (item);
|
||||
}
|
||||
|
||||
append_separator (box);
|
||||
g_menu_append_section (menu, NULL, G_MENU_MODEL (section));
|
||||
g_object_unref (section);
|
||||
|
||||
data.add_shortcut_item = add_button (box, _("_Add Bookmark"), "row.bookmark");
|
||||
data.remove_item = add_button (box, _("_Remove"), "row.remove");
|
||||
data.rename_item = add_button (box, _("Rename…"), "row.rename");
|
||||
section = g_menu_new ();
|
||||
item = g_menu_item_new (_("_Add Bookmark"), "row.add-bookmark");
|
||||
g_menu_append_item (section, item);
|
||||
g_object_unref (item);
|
||||
|
||||
data.separator_item = append_separator (box);
|
||||
item = g_menu_item_new (_("_Remove"), "row.remove");
|
||||
g_menu_append_item (section, item);
|
||||
g_object_unref (item);
|
||||
|
||||
data.mount_item = add_button (box, _("_Mount"), "row.mount");
|
||||
data.unmount_item = add_button (box, _("_Unmount"), "row.unmount");
|
||||
data.eject_item = add_button (box, _("_Eject"), "row.eject");
|
||||
data.rescan_item = add_button (box, _("_Detect Media"), "row.rescan");
|
||||
data.start_item = add_button (box, _("_Start"), "row.start");
|
||||
data.stop_item = add_button (box, _("_Stop"), "row.stop");
|
||||
item = g_menu_item_new (_("_Rename"), "row.rename");
|
||||
g_menu_append_item (section, item);
|
||||
g_object_unref (item);
|
||||
|
||||
/* Update everything! */
|
||||
check_popover_sensitivity (row, &data);
|
||||
g_menu_append_section (menu, NULL, G_MENU_MODEL (section));
|
||||
g_object_unref (section);
|
||||
|
||||
section = g_menu_new ();
|
||||
|
||||
if (volume != NULL && mount == NULL &&
|
||||
g_volume_can_mount (volume))
|
||||
{
|
||||
item = g_menu_item_new (_("_Mount"), "row.mount");
|
||||
g_menu_append_item (section, item);
|
||||
g_object_unref (item);
|
||||
}
|
||||
|
||||
show_stop = (drive != NULL && g_drive_can_stop (drive));
|
||||
|
||||
if (show_unmount && !show_stop)
|
||||
{
|
||||
item = g_menu_item_new (_("_Unmount"), "row.unmount");
|
||||
g_menu_append_item (section, item);
|
||||
g_object_unref (item);
|
||||
}
|
||||
|
||||
if (show_eject)
|
||||
{
|
||||
item = g_menu_item_new (_("_Eject"), "row.eject");
|
||||
g_menu_append_item (section, item);
|
||||
g_object_unref (item);
|
||||
}
|
||||
|
||||
if (drive != NULL &&
|
||||
g_drive_is_media_removable (drive) &&
|
||||
!g_drive_is_media_check_automatic (drive) &&
|
||||
g_drive_can_poll_for_media (drive))
|
||||
{
|
||||
item = g_menu_item_new (_("_Detect Media"), "row.rescan");
|
||||
g_menu_append_item (section, item);
|
||||
g_object_unref (item);
|
||||
}
|
||||
|
||||
if (drive != NULL &&
|
||||
(g_drive_can_start (drive) || g_drive_can_start_degraded (drive)))
|
||||
{
|
||||
const guint ss_type = g_drive_get_start_stop_type (drive);
|
||||
const char *start_label = _("_Start");
|
||||
|
||||
if (ss_type == G_DRIVE_START_STOP_TYPE_SHUTDOWN) start_label = _("_Power On");
|
||||
else if (ss_type == G_DRIVE_START_STOP_TYPE_NETWORK) start_label = _("_Connect Drive");
|
||||
else if (ss_type == G_DRIVE_START_STOP_TYPE_MULTIDISK) start_label = _("_Start Multi-disk Device");
|
||||
else if (ss_type == G_DRIVE_START_STOP_TYPE_PASSWORD) start_label = _("_Unlock Device");
|
||||
|
||||
item = g_menu_item_new (start_label, "row.start");
|
||||
g_menu_append_item (section, item);
|
||||
g_object_unref (item);
|
||||
}
|
||||
|
||||
if (show_stop && !show_unmount)
|
||||
{
|
||||
const guint ss_type = g_drive_get_start_stop_type (drive);
|
||||
const char *stop_label = _("_Stop");
|
||||
|
||||
if (ss_type == G_DRIVE_START_STOP_TYPE_SHUTDOWN) stop_label = _("_Safely Remove Drive");
|
||||
else if (ss_type == G_DRIVE_START_STOP_TYPE_NETWORK) stop_label = _("_Disconnect Drive");
|
||||
else if (ss_type == G_DRIVE_START_STOP_TYPE_MULTIDISK) stop_label = _("Stop Multi-disk Device");
|
||||
else if (ss_type == G_DRIVE_START_STOP_TYPE_PASSWORD) stop_label = _("_Lock Device");
|
||||
|
||||
item = g_menu_item_new (stop_label, "row.stop");
|
||||
g_menu_append_item (section, item);
|
||||
g_object_unref (item);
|
||||
}
|
||||
|
||||
g_menu_append_section (menu, NULL, G_MENU_MODEL (section));
|
||||
g_object_unref (section);
|
||||
|
||||
sidebar->popover = gtk_popover_menu_new_from_model (G_MENU_MODEL (menu));
|
||||
g_object_unref (menu);
|
||||
g_signal_connect (sidebar->popover, "destroy", G_CALLBACK (on_row_popover_destroy), sidebar);
|
||||
|
||||
setup_popover_shadowing (sidebar->popover);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -3696,7 +3602,7 @@ on_row_dragged (GtkGestureDrag *gesture,
|
||||
sidebar->dragging_over = TRUE;
|
||||
|
||||
content = gdk_content_provider_new_typed (GTK_TYPE_SIDEBAR_ROW, sidebar->drag_row);
|
||||
|
||||
|
||||
surface = gtk_native_get_surface (gtk_widget_get_native (GTK_WIDGET (sidebar)));
|
||||
device = gtk_gesture_get_device (GTK_GESTURE (gesture));
|
||||
|
||||
@@ -3710,6 +3616,7 @@ on_row_dragged (GtkGestureDrag *gesture,
|
||||
gtk_widget_hide (sidebar->drag_row);
|
||||
|
||||
drag_widget = GTK_WIDGET (gtk_sidebar_row_clone (GTK_SIDEBAR_ROW (sidebar->drag_row)));
|
||||
g_object_ref_sink (drag_widget);
|
||||
sidebar->drag_row_height = allocation.height;
|
||||
gtk_widget_set_size_request (drag_widget, allocation.width, allocation.height);
|
||||
|
||||
@@ -3719,7 +3626,7 @@ on_row_dragged (GtkGestureDrag *gesture,
|
||||
gtk_drag_icon_set_from_paintable (drag, paintable, sidebar->drag_row_x, sidebar->drag_row_y);
|
||||
g_object_unref (paintable);
|
||||
|
||||
g_object_set_data_full (G_OBJECT (drag), "row-widget", drag_widget, (GDestroyNotify)gtk_widget_destroy);
|
||||
g_object_set_data_full (G_OBJECT (drag), "row-widget", drag_widget, (GDestroyNotify)g_object_unref);
|
||||
|
||||
g_object_unref (drag);
|
||||
}
|
||||
@@ -4062,7 +3969,11 @@ gtk_places_sidebar_init (GtkPlacesSidebar *sidebar)
|
||||
/* populate the sidebar */
|
||||
update_places (sidebar);
|
||||
|
||||
add_actions (sidebar);
|
||||
sidebar->row_actions = G_ACTION_GROUP (g_simple_action_group_new ());
|
||||
g_action_map_add_action_entries (G_ACTION_MAP (sidebar->row_actions),
|
||||
entries, G_N_ELEMENTS (entries),
|
||||
sidebar);
|
||||
gtk_widget_insert_action_group (GTK_WIDGET (sidebar), "row", sidebar->row_actions);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -4186,15 +4097,11 @@ gtk_places_sidebar_dispose (GObject *object)
|
||||
sidebar->bookmarks_manager = NULL;
|
||||
}
|
||||
|
||||
if (sidebar->popover)
|
||||
{
|
||||
gtk_widget_destroy (sidebar->popover);
|
||||
sidebar->popover = NULL;
|
||||
}
|
||||
g_clear_pointer (&sidebar->popover, gtk_widget_unparent);
|
||||
|
||||
if (sidebar->rename_popover)
|
||||
{
|
||||
gtk_widget_destroy (sidebar->rename_popover);
|
||||
gtk_widget_unparent (sidebar->rename_popover);
|
||||
sidebar->rename_popover = NULL;
|
||||
sidebar->rename_entry = NULL;
|
||||
sidebar->rename_button = NULL;
|
||||
|
||||
@@ -1155,11 +1155,9 @@ static void
|
||||
gtk_popover_update_shape (GtkPopover *popover)
|
||||
{
|
||||
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
|
||||
GtkWidget *widget = GTK_WIDGET (popover);
|
||||
|
||||
if (priv->has_arrow)
|
||||
{
|
||||
|
||||
cairo_surface_t *cairo_surface;
|
||||
cairo_region_t *region;
|
||||
cairo_t *cr;
|
||||
@@ -1177,11 +1175,11 @@ gtk_popover_update_shape (GtkPopover *popover)
|
||||
region = gdk_cairo_region_create_from_surface (cairo_surface);
|
||||
cairo_surface_destroy (cairo_surface);
|
||||
|
||||
gtk_widget_input_shape_combine_region (widget, region);
|
||||
gdk_surface_input_shape_combine_region (priv->surface, region, 0, 0);
|
||||
cairo_region_destroy (region);
|
||||
}
|
||||
else
|
||||
gtk_widget_input_shape_combine_region (widget, NULL);
|
||||
gdk_surface_input_shape_combine_region (priv->surface, NULL, 0, 0);
|
||||
}
|
||||
|
||||
static gint
|
||||
|
||||
@@ -604,7 +604,7 @@ gtk_popover_menu_set_menu_model (GtkPopoverMenu *popover,
|
||||
|
||||
stack = gtk_bin_get_child (GTK_BIN (popover));
|
||||
while ((child = gtk_widget_get_first_child (stack)))
|
||||
gtk_widget_destroy (child);
|
||||
gtk_container_remove (GTK_CONTAINER (stack), child);
|
||||
|
||||
if (model)
|
||||
gtk_menu_section_box_new_toplevel (popover, model, popover->flags);
|
||||
|
||||
@@ -369,7 +369,7 @@ tracker_remove (gint position,
|
||||
{
|
||||
if (i == position)
|
||||
{
|
||||
gtk_widget_destroy (child);
|
||||
gtk_widget_unparent (child);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -480,7 +480,7 @@ gtk_popover_menu_bar_dispose (GObject *object)
|
||||
g_clear_object (&bar->model);
|
||||
|
||||
while ((child = gtk_widget_get_first_child (GTK_WIDGET (bar))))
|
||||
gtk_widget_destroy (child);
|
||||
gtk_widget_unparent (child);
|
||||
|
||||
G_OBJECT_CLASS (gtk_popover_menu_bar_parent_class)->dispose (object);
|
||||
}
|
||||
@@ -651,7 +651,7 @@ gtk_popover_menu_bar_set_menu_model (GtkPopoverMenuBar *bar,
|
||||
GtkActionMuxer *muxer;
|
||||
|
||||
while ((child = gtk_widget_get_first_child (GTK_WIDGET (bar))))
|
||||
gtk_widget_destroy (child);
|
||||
gtk_widget_unparent (child);
|
||||
|
||||
g_clear_pointer (&bar->tracker, gtk_menu_tracker_free);
|
||||
|
||||
|
||||
108
gtk/gtkrange.c
108
gtk/gtkrange.c
@@ -204,7 +204,6 @@ static void gtk_range_compute_slider_position (GtkRange *range,
|
||||
GdkRectangle *slider_rect);
|
||||
static gboolean gtk_range_scroll (GtkRange *range,
|
||||
GtkScrollType scroll);
|
||||
static void gtk_range_calc_slider (GtkRange *range);
|
||||
static void gtk_range_calc_marks (GtkRange *range);
|
||||
static void gtk_range_adjustment_value_changed (GtkAdjustment *adjustment,
|
||||
gpointer data);
|
||||
@@ -2299,11 +2298,18 @@ gtk_range_drag_gesture_begin (GtkGestureDrag *gesture,
|
||||
|
||||
static void
|
||||
gtk_range_adjustment_changed (GtkAdjustment *adjustment,
|
||||
gpointer data)
|
||||
gpointer data)
|
||||
{
|
||||
GtkRange *range = GTK_RANGE (data);
|
||||
GtkRangePrivate *priv = gtk_range_get_instance_private (range);
|
||||
|
||||
gtk_range_calc_slider (range);
|
||||
if (gtk_adjustment_get_upper (priv->adjustment) == gtk_adjustment_get_lower (priv->adjustment) &&
|
||||
GTK_IS_SCALE (range))
|
||||
gtk_widget_hide (priv->slider_widget);
|
||||
else
|
||||
gtk_widget_show (priv->slider_widget);
|
||||
|
||||
gtk_widget_queue_allocate (priv->trough_widget);
|
||||
|
||||
/* Note that we don't round off to priv->round_digits here.
|
||||
* that's because it's really broken to change a value
|
||||
@@ -2521,9 +2527,6 @@ gtk_range_scroll (GtkRange *range,
|
||||
break;
|
||||
|
||||
case GTK_SCROLL_JUMP:
|
||||
/* Used by CList, range doesn't use it. */
|
||||
break;
|
||||
|
||||
case GTK_SCROLL_NONE:
|
||||
default:
|
||||
break;
|
||||
@@ -2546,11 +2549,11 @@ gtk_range_compute_slider_position (GtkRange *range,
|
||||
GdkRectangle *slider_rect)
|
||||
{
|
||||
GtkRangePrivate *priv = gtk_range_get_instance_private (range);
|
||||
int trough_width, trough_height;
|
||||
int slider_width, slider_height, min_slider_size;
|
||||
const double upper = gtk_adjustment_get_upper (priv->adjustment);
|
||||
const double lower = gtk_adjustment_get_lower (priv->adjustment);
|
||||
const double page_size = gtk_adjustment_get_page_size (priv->adjustment);
|
||||
int trough_width, trough_height;
|
||||
int slider_width, slider_height;
|
||||
|
||||
gtk_widget_measure (priv->slider_widget,
|
||||
GTK_ORIENTATION_HORIZONTAL, -1,
|
||||
@@ -2566,111 +2569,76 @@ gtk_range_compute_slider_position (GtkRange *range,
|
||||
|
||||
if (priv->orientation == GTK_ORIENTATION_VERTICAL)
|
||||
{
|
||||
gint y, bottom, top, height;
|
||||
|
||||
/* Slider fits into the trough, with stepper_spacing on either side,
|
||||
* and the size/position based on the adjustment or fixed, depending.
|
||||
*/
|
||||
int y, height;
|
||||
|
||||
slider_rect->x = (int) floor ((trough_width - slider_width) / 2);
|
||||
slider_rect->width = slider_width;
|
||||
|
||||
min_slider_size = slider_height;
|
||||
|
||||
/* Compute slider position/length */
|
||||
top = 0;
|
||||
bottom = top + trough_height;
|
||||
|
||||
/* slider height is the fraction (page_size /
|
||||
* total_adjustment_range) times the trough height in pixels
|
||||
*/
|
||||
|
||||
if (upper - lower != 0)
|
||||
height = (bottom - top) * (page_size / (upper - lower));
|
||||
height = trough_height * (page_size / (upper - lower));
|
||||
else
|
||||
height = min_slider_size;
|
||||
height = slider_height;
|
||||
|
||||
if (height < min_slider_size ||
|
||||
if (height < slider_height ||
|
||||
priv->slider_size_fixed)
|
||||
height = min_slider_size;
|
||||
height = slider_height;
|
||||
|
||||
height = MIN (height, trough_height);
|
||||
|
||||
y = top;
|
||||
|
||||
if (upper - lower - page_size != 0)
|
||||
y += (bottom - top - height) * ((adjustment_value - lower) / (upper - lower - page_size));
|
||||
y = (trough_height - height) * ((adjustment_value - lower) / (upper - lower - page_size));
|
||||
else
|
||||
y = 0;
|
||||
|
||||
y = CLAMP (y, 0, trough_height);
|
||||
|
||||
y = CLAMP (y, top, bottom);
|
||||
|
||||
if (should_invert (range))
|
||||
y = bottom - (y - top + height);
|
||||
|
||||
y = trough_height - y - height;
|
||||
|
||||
slider_rect->y = y;
|
||||
slider_rect->height = height;
|
||||
}
|
||||
else
|
||||
{
|
||||
gint x, left, right, width;
|
||||
|
||||
/* Slider fits into the trough, with stepper_spacing on either side,
|
||||
* and the size/position based on the adjustment or fixed, depending.
|
||||
*/
|
||||
int x, width;
|
||||
|
||||
slider_rect->y = (int) floor ((trough_height - slider_height) / 2);
|
||||
slider_rect->height = slider_height;
|
||||
|
||||
min_slider_size = slider_width;
|
||||
|
||||
/* Compute slider position/length */
|
||||
left = 0;
|
||||
right = left + trough_width;
|
||||
|
||||
/* slider width is the fraction (page_size /
|
||||
* total_adjustment_range) times the trough width in pixels
|
||||
*/
|
||||
|
||||
if (upper - lower != 0)
|
||||
width = (right - left) * (page_size / (upper - lower));
|
||||
width = trough_width * (page_size / (upper - lower));
|
||||
else
|
||||
width = min_slider_size;
|
||||
width = slider_width;
|
||||
|
||||
if (width < min_slider_size ||
|
||||
if (width < slider_width ||
|
||||
priv->slider_size_fixed)
|
||||
width = min_slider_size;
|
||||
width = slider_width;
|
||||
|
||||
width = MIN (width, trough_width);
|
||||
|
||||
x = left;
|
||||
|
||||
if (upper - lower - page_size != 0)
|
||||
x += (right - left - width) * ((adjustment_value - lower) / (upper - lower - page_size));
|
||||
|
||||
x = CLAMP (x, left, right);
|
||||
|
||||
x = (trough_width - width) * ((adjustment_value - lower) / (upper - lower - page_size));
|
||||
else
|
||||
x = 0;
|
||||
|
||||
x = CLAMP (x, 0, trough_width);
|
||||
|
||||
if (should_invert (range))
|
||||
x = right - (x - left + width);
|
||||
|
||||
x = trough_width - x - width;
|
||||
|
||||
slider_rect->x = x;
|
||||
slider_rect->width = width;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_range_calc_slider (GtkRange *range)
|
||||
{
|
||||
GtkRangePrivate *priv = gtk_range_get_instance_private (range);
|
||||
gboolean visible;
|
||||
|
||||
if (GTK_IS_SCALE (range) &&
|
||||
gtk_adjustment_get_upper (priv->adjustment) == gtk_adjustment_get_lower (priv->adjustment))
|
||||
visible = FALSE;
|
||||
else
|
||||
visible = TRUE;
|
||||
|
||||
gtk_widget_set_visible (priv->slider_widget, visible);
|
||||
|
||||
gtk_widget_queue_allocate (priv->trough_widget);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_range_calc_marks (GtkRange *range)
|
||||
{
|
||||
|
||||
@@ -1404,14 +1404,11 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
|
||||
{
|
||||
GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
|
||||
GtkScrolledWindowPrivate *priv = gtk_scrolled_window_get_instance_private (scrolled_window);
|
||||
GtkBin *bin;
|
||||
GtkAllocation child_allocation;
|
||||
GtkWidget *child;
|
||||
gint sb_width;
|
||||
gint sb_height;
|
||||
|
||||
bin = GTK_BIN (scrolled_window);
|
||||
|
||||
/* Get possible scrollbar dimensions */
|
||||
gtk_widget_measure (priv->vscrollbar, GTK_ORIENTATION_HORIZONTAL, -1,
|
||||
&sb_width, NULL, NULL, NULL);
|
||||
@@ -1430,7 +1427,7 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
|
||||
priv->vscrollbar_policy == GTK_POLICY_EXTERNAL)
|
||||
priv->vscrollbar_visible = FALSE;
|
||||
|
||||
child = gtk_bin_get_child (bin);
|
||||
child = gtk_bin_get_child (GTK_BIN (scrolled_window));
|
||||
if (child && gtk_widget_get_visible (child))
|
||||
{
|
||||
gint child_scroll_width;
|
||||
@@ -2069,7 +2066,6 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
|
||||
GtkAdjustment *hadjustment)
|
||||
{
|
||||
GtkScrolledWindowPrivate *priv = gtk_scrolled_window_get_instance_private (scrolled_window);
|
||||
GtkBin *bin;
|
||||
GtkWidget *child;
|
||||
|
||||
g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
|
||||
@@ -2079,8 +2075,6 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
|
||||
else
|
||||
hadjustment = (GtkAdjustment*) g_object_new (GTK_TYPE_ADJUSTMENT, NULL);
|
||||
|
||||
bin = GTK_BIN (scrolled_window);
|
||||
|
||||
if (!priv->hscrollbar)
|
||||
{
|
||||
priv->hscrollbar = gtk_scrollbar_new (GTK_ORIENTATION_HORIZONTAL, hadjustment);
|
||||
@@ -2121,7 +2115,7 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
|
||||
gtk_scrolled_window_adjustment_changed (hadjustment, scrolled_window);
|
||||
gtk_scrolled_window_adjustment_value_changed (hadjustment, scrolled_window);
|
||||
|
||||
child = gtk_bin_get_child (bin);
|
||||
child = gtk_bin_get_child (GTK_BIN (scrolled_window));
|
||||
if (child)
|
||||
gtk_scrollable_set_hadjustment (GTK_SCROLLABLE (child), hadjustment);
|
||||
|
||||
@@ -2143,7 +2137,6 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
|
||||
GtkAdjustment *vadjustment)
|
||||
{
|
||||
GtkScrolledWindowPrivate *priv = gtk_scrolled_window_get_instance_private (scrolled_window);
|
||||
GtkBin *bin;
|
||||
GtkWidget *child;
|
||||
|
||||
g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
|
||||
@@ -2153,8 +2146,6 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
|
||||
else
|
||||
vadjustment = (GtkAdjustment*) g_object_new (GTK_TYPE_ADJUSTMENT, NULL);
|
||||
|
||||
bin = GTK_BIN (scrolled_window);
|
||||
|
||||
if (!priv->vscrollbar)
|
||||
{
|
||||
priv->vscrollbar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, vadjustment);
|
||||
@@ -2195,7 +2186,7 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
|
||||
gtk_scrolled_window_adjustment_changed (vadjustment, scrolled_window);
|
||||
gtk_scrolled_window_adjustment_value_changed (vadjustment, scrolled_window);
|
||||
|
||||
child = gtk_bin_get_child (bin);
|
||||
child = gtk_bin_get_child (GTK_BIN (scrolled_window));
|
||||
if (child)
|
||||
gtk_scrollable_set_vadjustment (GTK_SCROLLABLE (child), vadjustment);
|
||||
|
||||
@@ -3495,7 +3486,7 @@ gtk_scrolled_window_add (GtkContainer *container,
|
||||
GtkAdjustment *hadj, *vadj;
|
||||
|
||||
bin = GTK_BIN (container);
|
||||
g_return_if_fail (gtk_bin_get_child (GTK_BIN (scrolled_window)) == NULL);
|
||||
g_return_if_fail (gtk_bin_get_child (bin) == NULL);
|
||||
|
||||
/* gtk_scrolled_window_set_[hv]adjustment have the side-effect
|
||||
* of creating the scrollbars
|
||||
|
||||
@@ -22,8 +22,6 @@
|
||||
#include "gtkboxlayout.h"
|
||||
#include "gtklabel.h"
|
||||
#include "gtkframe.h"
|
||||
#include "gtkstylecontext.h"
|
||||
#include "gtkprivate.h"
|
||||
#include "gtkintl.h"
|
||||
|
||||
/**
|
||||
|
||||
@@ -136,7 +136,7 @@ rebuild_child (GtkWidget *self,
|
||||
|
||||
button_child = gtk_bin_get_child (GTK_BIN (self));
|
||||
if (button_child != NULL)
|
||||
gtk_widget_destroy (button_child);
|
||||
gtk_container_remove (GTK_CONTAINER (self), button_child);
|
||||
|
||||
button_child = NULL;
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "config.h"
|
||||
|
||||
#include "gtkstatusbar.h"
|
||||
#include "gtkstatusbarprivate.h"
|
||||
|
||||
#include "gtkbinlayout.h"
|
||||
#include "gtkframe.h"
|
||||
@@ -501,7 +502,7 @@ gtk_statusbar_remove_all (GtkStatusbar *statusbar,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
/** < private >
|
||||
* gtk_statusbar_get_message_area:
|
||||
* @statusbar: a #GtkStatusbar
|
||||
*
|
||||
@@ -509,14 +510,14 @@ gtk_statusbar_remove_all (GtkStatusbar *statusbar,
|
||||
*
|
||||
* Returns: (type Gtk.Box) (transfer none): a #GtkBox
|
||||
*/
|
||||
GtkWidget*
|
||||
gtk_statusbar_get_message_area (GtkStatusbar *statusbar)
|
||||
const char*
|
||||
gtk_statusbar_get_message (GtkStatusbar *statusbar)
|
||||
{
|
||||
GtkStatusbarPrivate *priv = gtk_statusbar_get_instance_private (statusbar);
|
||||
|
||||
g_return_val_if_fail (GTK_IS_STATUSBAR (statusbar), NULL);
|
||||
|
||||
return priv->message_area;
|
||||
return gtk_label_get_label (GTK_LABEL (priv->label));
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -62,9 +62,6 @@ GDK_AVAILABLE_IN_ALL
|
||||
void gtk_statusbar_remove_all (GtkStatusbar *statusbar,
|
||||
guint context_id);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkWidget* gtk_statusbar_get_message_area (GtkStatusbar *statusbar);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GTK_STATUSBAR_H__ */
|
||||
|
||||
30
gtk/gtkstatusbarprivate.h
Normal file
30
gtk/gtkstatusbarprivate.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
* GtkStatusbar Copyright (C) 1998 Shawn T. Amundson
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __GTK_STATUSBAR_PRIVATE_H__
|
||||
#define __GTK_STATUSBAR_PRIVATE_H__
|
||||
|
||||
#include "gtkwidget.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
const char * gtk_statusbar_get_message (GtkStatusbar *statusbar);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GTK_STATUSBAR_H__ */
|
||||
170
gtk/gtkwidget.c
170
gtk/gtkwidget.c
@@ -689,8 +689,6 @@ static void gtk_widget_set_usize_internal (GtkWidget *widget,
|
||||
|
||||
static gboolean event_surface_is_still_viewable (GdkEvent *event);
|
||||
|
||||
static void gtk_widget_update_input_shape (GtkWidget *widget);
|
||||
|
||||
static gboolean gtk_widget_class_get_visible_by_default (GtkWidgetClass *widget_class);
|
||||
|
||||
static void remove_parent_surface_transform_changed_listener (GtkWidget *widget);
|
||||
@@ -707,7 +705,6 @@ GtkTextDirection gtk_default_direction = GTK_TEXT_DIR_LTR;
|
||||
|
||||
static GQuark quark_accel_path = 0;
|
||||
static GQuark quark_accel_closures = 0;
|
||||
static GQuark quark_input_shape_info = 0;
|
||||
static GQuark quark_pango_context = 0;
|
||||
static GQuark quark_mnemonic_labels = 0;
|
||||
static GQuark quark_tooltip_markup = 0;
|
||||
@@ -864,7 +861,6 @@ gtk_widget_class_init (GtkWidgetClass *klass)
|
||||
|
||||
quark_accel_path = g_quark_from_static_string ("gtk-accel-path");
|
||||
quark_accel_closures = g_quark_from_static_string ("gtk-accel-closures");
|
||||
quark_input_shape_info = g_quark_from_static_string ("gtk-input-shape-info");
|
||||
quark_pango_context = g_quark_from_static_string ("gtk-pango-context");
|
||||
quark_mnemonic_labels = g_quark_from_static_string ("gtk-mnemonic-labels");
|
||||
quark_tooltip_markup = g_quark_from_static_string ("gtk-tooltip-markup");
|
||||
@@ -2413,7 +2409,6 @@ gtk_widget_init (GTypeInstance *instance, gpointer g_class)
|
||||
priv->name = NULL;
|
||||
priv->user_alpha = 255;
|
||||
priv->alpha = 255;
|
||||
priv->surface = NULL;
|
||||
priv->parent = NULL;
|
||||
priv->first_child = NULL;
|
||||
priv->last_child = NULL;
|
||||
@@ -3532,13 +3527,23 @@ gtk_widget_remove_surface_transform_changed_callback (GtkWidget *widget,
|
||||
}
|
||||
}
|
||||
|
||||
static GdkSurface *
|
||||
gtk_widget_get_surface (GtkWidget *widget)
|
||||
{
|
||||
GtkNative *native = gtk_widget_get_native (widget);
|
||||
|
||||
if (native)
|
||||
return gtk_native_get_surface (native);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_widget_realize:
|
||||
* @widget: a #GtkWidget
|
||||
*
|
||||
* Creates the GDK (windowing system) resources associated with a
|
||||
* widget. For example, @widget->surface will be created when a widget
|
||||
* is realized. Normally realization happens implicitly; if you show
|
||||
* widget. Normally realization happens implicitly; if you show
|
||||
* a widget and all its parent containers, then the widget will be
|
||||
* realized and mapped automatically.
|
||||
*
|
||||
@@ -3580,10 +3585,12 @@ gtk_widget_realize (GtkWidget *widget)
|
||||
|
||||
g_signal_emit (widget, widget_signals[REALIZE], 0);
|
||||
|
||||
gtk_widget_update_input_shape (widget);
|
||||
|
||||
if (priv->multidevice)
|
||||
gdk_surface_set_support_multidevice (priv->surface, TRUE);
|
||||
{
|
||||
GdkSurface *surface = gtk_widget_get_surface (widget);
|
||||
|
||||
gdk_surface_set_support_multidevice (surface, TRUE);
|
||||
}
|
||||
|
||||
gtk_widget_update_alpha (widget);
|
||||
|
||||
@@ -3602,7 +3609,7 @@ gtk_widget_realize (GtkWidget *widget)
|
||||
*
|
||||
* This function is only useful in widget implementations.
|
||||
* Causes a widget to be unrealized (frees all GDK resources
|
||||
* associated with the widget, such as @widget->surface).
|
||||
* associated with the widget).
|
||||
**/
|
||||
void
|
||||
gtk_widget_unrealize (GtkWidget *widget)
|
||||
@@ -3614,9 +3621,6 @@ gtk_widget_unrealize (GtkWidget *widget)
|
||||
g_object_ref (widget);
|
||||
gtk_widget_push_verify_invariants (widget);
|
||||
|
||||
if (g_object_get_qdata (G_OBJECT (widget), quark_input_shape_info))
|
||||
gtk_widget_input_shape_combine_region (widget, NULL);
|
||||
|
||||
if (_gtk_widget_get_realized (widget))
|
||||
{
|
||||
if (priv->mapped)
|
||||
@@ -3830,7 +3834,9 @@ gtk_widget_get_frame_clock (GtkWidget *widget)
|
||||
|
||||
if (priv->realized)
|
||||
{
|
||||
return gdk_surface_get_frame_clock (priv->surface);
|
||||
GdkSurface *surface = gtk_widget_get_surface (widget);
|
||||
|
||||
return gdk_surface_get_frame_clock (surface);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4362,12 +4368,16 @@ static gboolean
|
||||
gtk_widget_real_can_activate_accel (GtkWidget *widget,
|
||||
guint signal_id)
|
||||
{
|
||||
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
|
||||
GdkSurface *surface;
|
||||
|
||||
/* widgets must be onscreen for accels to take effect */
|
||||
return gtk_widget_is_sensitive (widget) &&
|
||||
_gtk_widget_get_mapped (widget) &&
|
||||
gdk_surface_is_viewable (priv->surface);
|
||||
if (!gtk_widget_is_sensitive (widget) ||
|
||||
!_gtk_widget_get_mapped (widget))
|
||||
return FALSE;
|
||||
|
||||
surface = gtk_widget_get_surface (widget);
|
||||
|
||||
return gdk_surface_is_viewable (surface);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -6865,7 +6875,6 @@ _gtk_widget_scale_changed (GtkWidget *widget)
|
||||
gint
|
||||
gtk_widget_get_scale_factor (GtkWidget *widget)
|
||||
{
|
||||
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
|
||||
GtkRoot *root;
|
||||
GdkDisplay *display;
|
||||
GdkMonitor *monitor;
|
||||
@@ -6873,7 +6882,12 @@ gtk_widget_get_scale_factor (GtkWidget *widget)
|
||||
g_return_val_if_fail (GTK_IS_WIDGET (widget), 1);
|
||||
|
||||
if (_gtk_widget_get_realized (widget))
|
||||
return gdk_surface_get_scale_factor (priv->surface);
|
||||
{
|
||||
GdkSurface *surface = gtk_widget_get_surface (widget);
|
||||
|
||||
if (surface)
|
||||
return gdk_surface_get_scale_factor (surface);
|
||||
}
|
||||
|
||||
root = _gtk_widget_get_root (widget);
|
||||
if (root && GTK_WIDGET (root) != widget)
|
||||
@@ -7024,9 +7038,9 @@ gtk_widget_keynav_failed (GtkWidget *widget,
|
||||
void
|
||||
gtk_widget_error_bell (GtkWidget *widget)
|
||||
{
|
||||
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
|
||||
GtkSettings* settings;
|
||||
gboolean beep;
|
||||
GdkSurface *surface;
|
||||
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
@@ -7034,12 +7048,14 @@ gtk_widget_error_bell (GtkWidget *widget)
|
||||
if (!settings)
|
||||
return;
|
||||
|
||||
surface = gtk_widget_get_surface (widget);
|
||||
|
||||
g_object_get (settings,
|
||||
"gtk-error-bell", &beep,
|
||||
NULL);
|
||||
|
||||
if (beep && priv->surface)
|
||||
gdk_surface_beep (priv->surface);
|
||||
if (beep && surface)
|
||||
gdk_surface_beep (surface);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -7754,18 +7770,6 @@ gtk_widget_real_realize (GtkWidget *widget)
|
||||
{
|
||||
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
|
||||
|
||||
if (GTK_IS_NATIVE (widget))
|
||||
{
|
||||
priv->surface = gtk_native_get_surface (GTK_NATIVE (widget));
|
||||
g_object_ref (priv->surface);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_assert (priv->parent);
|
||||
priv->surface = priv->parent->priv->surface;
|
||||
g_object_ref (priv->surface);
|
||||
}
|
||||
|
||||
priv->realized = TRUE;
|
||||
|
||||
gtk_widget_connect_frame_clock (widget);
|
||||
@@ -7797,8 +7801,6 @@ gtk_widget_real_unrealize (GtkWidget *widget)
|
||||
gtk_widget_disconnect_frame_clock (widget);
|
||||
|
||||
priv->realized = FALSE;
|
||||
|
||||
g_clear_object (&priv->surface);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -7959,7 +7961,7 @@ _gtk_widget_synthesize_crossing (GtkWidget *from,
|
||||
|
||||
from_surface = _gtk_widget_get_device_surface (from, device);
|
||||
if (!from_surface)
|
||||
from_surface = from->priv->surface;
|
||||
from_surface = gtk_widget_get_surface (from);
|
||||
|
||||
gdk_surface_get_device_position (from_surface, device, &x, &y, NULL);
|
||||
gtk_widget_handle_crossing (from, &crossing, x, y);
|
||||
@@ -7969,7 +7971,7 @@ _gtk_widget_synthesize_crossing (GtkWidget *from,
|
||||
{
|
||||
to_surface = _gtk_widget_get_device_surface (to, device);
|
||||
if (!to_surface)
|
||||
to_surface = to->priv->surface;
|
||||
to_surface = gtk_widget_get_surface (to);
|
||||
|
||||
crossing.direction = GTK_CROSSING_IN;
|
||||
gdk_surface_get_device_position (to_surface, device, &x, &y, NULL);
|
||||
@@ -8074,85 +8076,6 @@ gtk_widget_propagate_state (GtkWidget *widget,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_widget_update_input_shape (GtkWidget *widget)
|
||||
{
|
||||
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
|
||||
|
||||
/* set shape if widget has a GDK surface already.
|
||||
* otherwise the shape is scheduled to be set by gtk_widget_realize().
|
||||
*/
|
||||
if (priv->surface)
|
||||
{
|
||||
cairo_region_t *region;
|
||||
cairo_region_t *csd_region;
|
||||
cairo_region_t *app_region;
|
||||
gboolean free_region;
|
||||
|
||||
app_region = g_object_get_qdata (G_OBJECT (widget), quark_input_shape_info);
|
||||
csd_region = g_object_get_data (G_OBJECT (widget), "csd-region");
|
||||
|
||||
free_region = FALSE;
|
||||
|
||||
if (app_region && csd_region)
|
||||
{
|
||||
free_region = TRUE;
|
||||
region = cairo_region_copy (app_region);
|
||||
cairo_region_intersect (region, csd_region);
|
||||
}
|
||||
else if (app_region)
|
||||
region = app_region;
|
||||
else if (csd_region)
|
||||
region = csd_region;
|
||||
else
|
||||
region = NULL;
|
||||
|
||||
gdk_surface_input_shape_combine_region (priv->surface, region, 0, 0);
|
||||
|
||||
if (free_region)
|
||||
cairo_region_destroy (region);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gtk_widget_set_csd_input_shape (GtkWidget *widget,
|
||||
const cairo_region_t *region)
|
||||
{
|
||||
if (region == NULL)
|
||||
g_object_set_data (G_OBJECT (widget), "csd-region", NULL);
|
||||
else
|
||||
g_object_set_data_full (G_OBJECT (widget), "csd-region",
|
||||
cairo_region_copy (region),
|
||||
(GDestroyNotify) cairo_region_destroy);
|
||||
gtk_widget_update_input_shape (widget);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_widget_input_shape_combine_region:
|
||||
* @widget: a #GtkWidget
|
||||
* @region: (allow-none): shape to be added, or %NULL to remove an existing shape
|
||||
*
|
||||
* Sets an input shape for this widget’s GDK surface. This allows for
|
||||
* windows which react to mouse click in a nonrectangular region, see
|
||||
* gdk_surface_input_shape_combine_region() for more information.
|
||||
**/
|
||||
void
|
||||
gtk_widget_input_shape_combine_region (GtkWidget *widget,
|
||||
cairo_region_t *region)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
/* set_shape doesn't work on widgets without GDK surface */
|
||||
g_return_if_fail (GTK_IS_NATIVE (widget));
|
||||
|
||||
if (region == NULL)
|
||||
g_object_set_qdata (G_OBJECT (widget), quark_input_shape_info, NULL);
|
||||
else
|
||||
g_object_set_qdata_full (G_OBJECT (widget), quark_input_shape_info,
|
||||
cairo_region_copy (region),
|
||||
(GDestroyNotify) cairo_region_destroy);
|
||||
gtk_widget_update_input_shape (widget);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_requisition_new:
|
||||
*
|
||||
@@ -10728,7 +10651,12 @@ gtk_widget_set_support_multidevice (GtkWidget *widget,
|
||||
priv->multidevice = (support_multidevice == TRUE);
|
||||
|
||||
if (_gtk_widget_get_realized (widget))
|
||||
gdk_surface_set_support_multidevice (priv->surface, support_multidevice);
|
||||
{
|
||||
GdkSurface *surface = gtk_widget_get_surface (widget);
|
||||
|
||||
if (surface)
|
||||
gdk_surface_set_support_multidevice (surface, support_multidevice);
|
||||
}
|
||||
}
|
||||
|
||||
/* There are multiple alpha related sources. First of all the user can specify alpha
|
||||
@@ -10761,7 +10689,7 @@ gtk_widget_update_alpha (GtkWidget *widget)
|
||||
{
|
||||
if (GTK_IS_NATIVE (widget))
|
||||
{
|
||||
gdk_surface_set_opacity (priv->surface, priv->alpha / 255.0);
|
||||
gdk_surface_set_opacity (gtk_native_get_surface (GTK_NATIVE (widget)), priv->alpha / 255.0);
|
||||
gtk_widget_queue_allocate (widget);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -706,12 +706,6 @@ void gtk_widget_set_default_direction (GtkTextDirection dir);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkTextDirection gtk_widget_get_default_direction (void);
|
||||
|
||||
/* Counterpart to gdk_surface_input_shape_combine_region.
|
||||
*/
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gtk_widget_input_shape_combine_region (GtkWidget *widget,
|
||||
cairo_region_t *region);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gtk_widget_set_cursor (GtkWidget *widget,
|
||||
GdkCursor *cursor);
|
||||
|
||||
@@ -180,12 +180,6 @@ struct _GtkWidgetPrivate
|
||||
|
||||
GSList *paintables;
|
||||
|
||||
/* The widget's surface or its parent surface if it does
|
||||
* not have a surface. (Which will be indicated by the
|
||||
* no_surface field being set).
|
||||
*/
|
||||
GdkSurface *surface;
|
||||
|
||||
GList *event_controllers;
|
||||
|
||||
AtkObject *accessible;
|
||||
@@ -285,9 +279,6 @@ gboolean _gtk_widget_consumes_motion (GtkWidget
|
||||
|
||||
gboolean gtk_widget_has_tick_callback (GtkWidget *widget);
|
||||
|
||||
void gtk_widget_set_csd_input_shape (GtkWidget *widget,
|
||||
const cairo_region_t *region);
|
||||
|
||||
gboolean gtk_widget_has_size_request (GtkWidget *widget);
|
||||
|
||||
void gtk_widget_reset_controllers (GtkWidget *widget);
|
||||
|
||||
@@ -273,6 +273,8 @@ typedef struct
|
||||
GdkSurface *surface;
|
||||
GskRenderer *renderer;
|
||||
|
||||
cairo_region_t *extra_input_region;
|
||||
|
||||
GList *foci;
|
||||
|
||||
GtkConstraintSolver *constraint_solver;
|
||||
@@ -4670,6 +4672,7 @@ gtk_window_finalize (GObject *object)
|
||||
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
|
||||
GtkMnemonicHash *mnemonic_hash;
|
||||
|
||||
g_clear_pointer (&priv->extra_input_region, cairo_region_destroy);
|
||||
g_free (priv->title);
|
||||
gtk_window_release_application (window);
|
||||
|
||||
@@ -5335,11 +5338,26 @@ update_csd_shape (GtkWindow *window)
|
||||
if (rect.width > 0 && rect.height > 0)
|
||||
{
|
||||
cairo_region_t *region = cairo_region_create_rectangle (&rect);
|
||||
gtk_widget_set_csd_input_shape (widget, region);
|
||||
|
||||
if (priv->extra_input_region)
|
||||
cairo_region_intersect (region, priv->extra_input_region);
|
||||
|
||||
gdk_surface_input_shape_combine_region (priv->surface, region, 0, 0);
|
||||
cairo_region_destroy (region);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gtk_window_set_extra_input_region (GtkWindow *window,
|
||||
cairo_region_t *region)
|
||||
{
|
||||
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
|
||||
|
||||
g_clear_pointer (&priv->extra_input_region, cairo_region_destroy);
|
||||
priv->extra_input_region = cairo_region_copy (region);
|
||||
update_csd_shape (window);
|
||||
}
|
||||
|
||||
static void
|
||||
corner_rect (cairo_rectangle_int_t *rect,
|
||||
const GtkCssValue *value)
|
||||
|
||||
@@ -161,6 +161,9 @@ GtkWidget * gtk_window_pick_popover (GtkWindow *window,
|
||||
double y,
|
||||
GtkPickFlags flags);
|
||||
|
||||
void gtk_window_set_extra_input_region (GtkWindow *window,
|
||||
cairo_region_t *region);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GTK_WINDOW_PRIVATE_H__ */
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "gtkeventcontrollermotion.h"
|
||||
#include "gtkeventcontrollerkey.h"
|
||||
#include "gtknative.h"
|
||||
#include "gtkwindowprivate.h"
|
||||
|
||||
static GtkWidget *
|
||||
find_widget_at_pointer (GdkDevice *device)
|
||||
@@ -116,8 +117,10 @@ reemphasize_window (GtkWidget *window)
|
||||
display = gtk_widget_get_display (window);
|
||||
if (gdk_display_is_composited (display))
|
||||
{
|
||||
GtkInspectorWindow *iw = GTK_INSPECTOR_WINDOW (window);
|
||||
|
||||
gtk_widget_set_opacity (window, 1.0);
|
||||
gtk_widget_input_shape_combine_region (window, NULL);
|
||||
gtk_window_set_extra_input_region (GTK_WINDOW (iw), NULL);
|
||||
}
|
||||
else
|
||||
gdk_surface_raise (gtk_native_get_surface (GTK_NATIVE (window)));
|
||||
@@ -200,7 +203,7 @@ gtk_inspector_on_inspect (GtkWidget *button,
|
||||
gtk_widget_set_opacity (GTK_WIDGET (iw), 0.3);
|
||||
rect.x = rect.y = rect.width = rect.height = 0;
|
||||
region = cairo_region_create_rectangle (&rect);
|
||||
gtk_widget_input_shape_combine_region (GTK_WIDGET (iw), region);
|
||||
gtk_window_set_extra_input_region (GTK_WINDOW (iw), region);
|
||||
cairo_region_destroy (region);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -45,108 +45,99 @@
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSeparator" />
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<style>
|
||||
<class name="view"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkFrame">
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="hscrollbar-policy">never</property>
|
||||
<property name="propagate-natural-width">1</property>
|
||||
<style>
|
||||
<class name="sidebar"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="hscrollbar-policy">never</property>
|
||||
<property name="propagate-natural-width">1</property>
|
||||
<style>
|
||||
<class name="sidebar"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkListBox" id="recordings_list">
|
||||
<property name="vexpand">1</property>
|
||||
<signal name="row-selected" handler="recordings_list_row_selected"/>
|
||||
</object>
|
||||
</child>
|
||||
<object class="GtkListBox" id="recordings_list">
|
||||
<property name="vexpand">1</property>
|
||||
<signal name="row-selected" handler="recordings_list_row_selected"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFrame">
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="hscrollbar-policy">never</property>
|
||||
<property name="propagate-natural-width">1</property>
|
||||
<style>
|
||||
<class name="sidebar"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="hscrollbar-policy">never</property>
|
||||
<property name="propagate-natural-width">1</property>
|
||||
<style>
|
||||
<class name="sidebar"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkListBox" id="render_node_list">
|
||||
<property name="vexpand">1</property>
|
||||
<signal name="row-selected" handler="render_node_list_selection_changed"/>
|
||||
</object>
|
||||
</child>
|
||||
<object class="GtkListBox" id="render_node_list">
|
||||
<property name="vexpand">1</property>
|
||||
<signal name="row-selected" handler="render_node_list_selection_changed"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFrame">
|
||||
<object class="GtkPaned" id="render_paned">
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="position">300</property>
|
||||
<property name="wide-handle">1</property>
|
||||
<child>
|
||||
<object class="GtkPaned" id="render_paned">
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="position">300</property>
|
||||
<property name="wide-handle">1</property>
|
||||
<object class="GtkScrolledWindow">
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<object class="GtkTreeView" id="node_property_tree">
|
||||
<property name="activate-on-single-click">1</property>
|
||||
<signal name="row-activated" handler="node_property_activated"/>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="node_property_tree">
|
||||
<property name="activate-on-single-click">1</property>
|
||||
<signal name="row-activated" handler="node_property_activated"/>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="title" translatable="yes">Property</property>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="title" translatable="yes">Property</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText">
|
||||
<property name="yalign">0</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
<object class="GtkCellRendererText">
|
||||
<property name="yalign">0</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="title" translatable="yes">Value</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText">
|
||||
<property name="yalign">0</property>
|
||||
<property name="wrap-mode">word</property>
|
||||
<property name="max-width-chars">50</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">1</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="title" translatable="yes">Value</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText">
|
||||
<property name="yalign">0</property>
|
||||
<property name="wrap-mode">word</property>
|
||||
<property name="max-width-chars">50</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">1</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCellRendererPixbuf">
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="visible">2</attribute>
|
||||
<attribute name="texture">3</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
<object class="GtkCellRendererPixbuf">
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="visible">2</attribute>
|
||||
<attribute name="texture">3</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkPicture" id="render_node_view">
|
||||
<property name="expand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkPicture" id="render_node_view">
|
||||
<property name="expand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface domain="gtk40">
|
||||
<object class="GtkButton" id="down_slider_button">
|
||||
<property name="can-focus">1</property>
|
||||
<property name="receives-default">1</property>
|
||||
<property name="focus-on-click">0</property>
|
||||
<child internal-child="accessible">
|
||||
<object class="AtkObject" id="down_slider_button-atkobject">
|
||||
<property name="AtkObject::accessible-name" translatable="yes">Down Path</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="icon-name">pan-end-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="slider-button"/>
|
||||
</style>
|
||||
</object>
|
||||
<object class="GtkButton" id="up_slider_button">
|
||||
<property name="can-focus">1</property>
|
||||
<property name="receives-default">1</property>
|
||||
<property name="focus-on-click">0</property>
|
||||
<child internal-child="accessible">
|
||||
<object class="AtkObject" id="up_slider_button-atkobject">
|
||||
<property name="AtkObject::accessible-name" translatable="yes">Up Path</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="icon-name">pan-start-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="slider-button"/>
|
||||
</style>
|
||||
</object>
|
||||
</interface>
|
||||
Reference in New Issue
Block a user