forked from AuroraMiddleware/gtk
Implemented GtkExtendedLayout on GtkWindow.
This commit is contained in:
parent
fe257d23dd
commit
6dc5cdb981
102
gtk/gtkwindow.c
102
gtk/gtkwindow.c
@ -208,8 +208,6 @@ static void gtk_window_map (GtkWidget *widget);
|
|||||||
static void gtk_window_unmap (GtkWidget *widget);
|
static void gtk_window_unmap (GtkWidget *widget);
|
||||||
static void gtk_window_realize (GtkWidget *widget);
|
static void gtk_window_realize (GtkWidget *widget);
|
||||||
static void gtk_window_unrealize (GtkWidget *widget);
|
static void gtk_window_unrealize (GtkWidget *widget);
|
||||||
static void gtk_window_size_request (GtkWidget *widget,
|
|
||||||
GtkRequisition *requisition);
|
|
||||||
static void gtk_window_size_allocate (GtkWidget *widget,
|
static void gtk_window_size_allocate (GtkWidget *widget,
|
||||||
GtkAllocation *allocation);
|
GtkAllocation *allocation);
|
||||||
static gint gtk_window_event (GtkWidget *widget,
|
static gint gtk_window_event (GtkWidget *widget,
|
||||||
@ -351,9 +349,19 @@ static void gtk_window_buildable_custom_finished (GtkBuildable *buildable,
|
|||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
|
|
||||||
|
static void gtk_window_extended_layout_init (GtkExtendedLayoutIface *iface);
|
||||||
|
static void gtk_window_get_desired_width (GtkExtendedLayout *layout,
|
||||||
|
gint *minimum_size,
|
||||||
|
gint *natural_size);
|
||||||
|
static void gtk_window_get_desired_height (GtkExtendedLayout *layout,
|
||||||
|
gint *minimum_size,
|
||||||
|
gint *natural_size);
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (GtkWindow, gtk_window, GTK_TYPE_BIN,
|
G_DEFINE_TYPE_WITH_CODE (GtkWindow, gtk_window, GTK_TYPE_BIN,
|
||||||
G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
|
G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
|
||||||
gtk_window_buildable_interface_init))
|
gtk_window_buildable_interface_init)
|
||||||
|
G_IMPLEMENT_INTERFACE (GTK_TYPE_EXTENDED_LAYOUT,
|
||||||
|
gtk_window_extended_layout_init))
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_tab_bindings (GtkBindingSet *binding_set,
|
add_tab_bindings (GtkBindingSet *binding_set,
|
||||||
@ -452,7 +460,6 @@ gtk_window_class_init (GtkWindowClass *klass)
|
|||||||
widget_class->unmap = gtk_window_unmap;
|
widget_class->unmap = gtk_window_unmap;
|
||||||
widget_class->realize = gtk_window_realize;
|
widget_class->realize = gtk_window_realize;
|
||||||
widget_class->unrealize = gtk_window_unrealize;
|
widget_class->unrealize = gtk_window_unrealize;
|
||||||
widget_class->size_request = gtk_window_size_request;
|
|
||||||
widget_class->size_allocate = gtk_window_size_allocate;
|
widget_class->size_allocate = gtk_window_size_allocate;
|
||||||
widget_class->configure_event = gtk_window_configure_event;
|
widget_class->configure_event = gtk_window_configure_event;
|
||||||
widget_class->key_press_event = gtk_window_key_press_event;
|
widget_class->key_press_event = gtk_window_key_press_event;
|
||||||
@ -4934,35 +4941,6 @@ gtk_window_unrealize (GtkWidget *widget)
|
|||||||
GTK_WIDGET_CLASS (gtk_window_parent_class)->unrealize (widget);
|
GTK_WIDGET_CLASS (gtk_window_parent_class)->unrealize (widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
gtk_window_size_request (GtkWidget *widget,
|
|
||||||
GtkRequisition *requisition)
|
|
||||||
{
|
|
||||||
GtkWindow *window;
|
|
||||||
GtkBin *bin;
|
|
||||||
|
|
||||||
window = GTK_WINDOW (widget);
|
|
||||||
bin = GTK_BIN (window);
|
|
||||||
|
|
||||||
requisition->width = GTK_CONTAINER (window)->border_width * 2;
|
|
||||||
requisition->height = GTK_CONTAINER (window)->border_width * 2;
|
|
||||||
|
|
||||||
if (bin->child && gtk_widget_get_visible (bin->child))
|
|
||||||
{
|
|
||||||
/* Use the minimum width for the natural height; even if its an hbox.
|
|
||||||
*
|
|
||||||
* This doesnt need to be here; naturally it will use the preference of the child
|
|
||||||
* except for testing purposes its more interesting this way.
|
|
||||||
*/
|
|
||||||
GtkRequisition child_req;
|
|
||||||
|
|
||||||
gtk_extended_layout_get_desired_size (GTK_EXTENDED_LAYOUT (bin->child), &child_req, NULL);
|
|
||||||
|
|
||||||
requisition->width += child_req.width;
|
|
||||||
requisition->height += child_req.height;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_window_size_allocate (GtkWidget *widget,
|
gtk_window_size_allocate (GtkWidget *widget,
|
||||||
GtkAllocation *allocation)
|
GtkAllocation *allocation)
|
||||||
@ -5562,6 +5540,64 @@ gtk_window_real_set_focus (GtkWindow *window,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_window_extended_layout_init (GtkExtendedLayoutIface *iface)
|
||||||
|
{
|
||||||
|
iface->get_desired_width = gtk_window_get_desired_width;
|
||||||
|
iface->get_desired_height = gtk_window_get_desired_height;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_window_get_desired_width (GtkExtendedLayout *layout,
|
||||||
|
gint *minimum_size,
|
||||||
|
gint *natural_size)
|
||||||
|
{
|
||||||
|
GtkWindow *window;
|
||||||
|
GtkWidget *child;
|
||||||
|
|
||||||
|
window = GTK_WINDOW (layout);
|
||||||
|
child = gtk_bin_get_child (GTK_BIN (window));
|
||||||
|
|
||||||
|
*minimum_size = GTK_CONTAINER (window)->border_width * 2;
|
||||||
|
*natural_size = GTK_CONTAINER (window)->border_width * 2;
|
||||||
|
|
||||||
|
if (child && gtk_widget_get_visible (child))
|
||||||
|
{
|
||||||
|
gint child_min, child_nat;
|
||||||
|
gtk_extended_layout_get_desired_width (GTK_EXTENDED_LAYOUT (child), &child_min, &child_nat);
|
||||||
|
|
||||||
|
*minimum_size += child_min;
|
||||||
|
*natural_size += child_nat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_window_get_desired_height (GtkExtendedLayout *layout,
|
||||||
|
gint *minimum_size,
|
||||||
|
gint *natural_size)
|
||||||
|
{
|
||||||
|
GtkWindow *window;
|
||||||
|
GtkWidget *child;
|
||||||
|
|
||||||
|
window = GTK_WINDOW (layout);
|
||||||
|
child = gtk_bin_get_child (GTK_BIN (window));
|
||||||
|
|
||||||
|
*minimum_size = GTK_CONTAINER (window)->border_width * 2;
|
||||||
|
*natural_size = GTK_CONTAINER (window)->border_width * 2;
|
||||||
|
|
||||||
|
if (child && gtk_widget_get_visible (child))
|
||||||
|
{
|
||||||
|
gint child_min, child_nat;
|
||||||
|
gtk_extended_layout_get_desired_height (GTK_EXTENDED_LAYOUT (child), &child_min, &child_nat);
|
||||||
|
|
||||||
|
*minimum_size += child_min;
|
||||||
|
*natural_size += child_nat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _gtk_window_unset_focus_and_default:
|
* _gtk_window_unset_focus_and_default:
|
||||||
* @window: a #GtkWindow
|
* @window: a #GtkWindow
|
||||||
|
Loading…
Reference in New Issue
Block a user