/**
* SECTION:hildon-window
- * @short_description: Widget representing a top-level window in the Hildon framework.
+ * @short_description: Top-level window in the Hildon framework.
* @see_also: #HildonProgram, #HildonStackableWindow
*
- * #HildonWindow is a GTK widget which represents a top-level
+ * #HildonWindow is a top-level
* window in the Hildon framework. It is derived from #GtkWindow
* and provides additional commodities specific to the Hildon
* framework.
#define CAN_HIBERNATE_PROPERTY "_HILDON_ABLE_TO_HIBERNATE"
+#define LEGACY_MENU_PROPERTY_NAME "_HILDON_WM_WINDOW_TYPE"
+#define LEGACY_MENU_PROPERTY_VALUE "_HILDON_WM_WINDOW_TYPE_LEGACY_MENU"
+
#define TITLE_SEPARATOR " - "
typedef void (*HildonWindowSignal) (HildonWindow *, gint, gpointer);
hildon_window_size_request (GtkWidget *widget,
GtkRequisition *requisition)
{
+ GdkScreen *screen = gtk_widget_get_screen (widget);
HildonWindowPrivate *priv = HILDON_WINDOW_GET_PRIVATE (widget);
+ GtkWidget *child;
+ GtkRequisition req;
g_assert (priv);
- GtkWidget *child = GTK_BIN (widget)->child;
- GtkRequisition req2 = { 0 };
- gint border_width = GTK_CONTAINER(widget)->border_width;
-
- if (! priv->borders)
- {
- hildon_window_get_borders (HILDON_WINDOW (widget));
- }
-
- if (child)
- gtk_widget_size_request (child, requisition);
+ child = gtk_bin_get_child (GTK_BIN (widget));
- if (priv->vbox != NULL)
- gtk_widget_size_request (priv->vbox, &req2);
+ if (child != NULL && GTK_WIDGET_VISIBLE (child))
+ gtk_widget_size_request (child, &req);
- requisition->height += req2.height;
- requisition->width = MAX (requisition->width, req2.width);
+ if (priv->vbox != NULL && GTK_WIDGET_VISIBLE (priv->vbox))
+ gtk_widget_size_request (priv->vbox, &req);
if (priv->edit_toolbar != NULL && GTK_WIDGET_VISIBLE (priv->edit_toolbar))
- {
- GtkRequisition req;
gtk_widget_size_request (priv->edit_toolbar, &req);
- requisition->height += req.height;
- requisition->width = MAX (requisition->width, req.width);
- }
- requisition->width += 2 * border_width;
- requisition->height += 2 * border_width;
+ /* Request the full size of the screen */
+ requisition->width = gdk_screen_get_width (screen);
+ requisition->height = gdk_screen_get_height (screen);
if (! priv->fullscreen)
- {
- requisition->height += priv->borders->top;
- if (req2.height == 0)
- requisition->height += priv->borders->bottom;
- requisition->width += priv->borders->left + priv->borders->right;
- }
+ requisition->height -= HILDON_WINDOW_TITLEBAR_HEIGHT;
}
static void
return GTK_WIDGET_CLASS (hildon_window_parent_class)->focus_out_event (widget, event);
}
+static void
+set_legacy_menu_type (GtkMenu *menu,
+ gboolean set)
+{
+ GdkWindow *gdkwin = GTK_WIDGET (menu->toplevel)->window;
+ GdkAtom property = gdk_atom_intern_static_string (LEGACY_MENU_PROPERTY_NAME);
+ if (set) {
+ GdkAtom type = gdk_x11_xatom_to_atom (XA_ATOM);
+ GdkAtom value = gdk_atom_intern_static_string (LEGACY_MENU_PROPERTY_VALUE);
+ gdk_property_change (gdkwin, property, type, 32,
+ GDK_PROP_MODE_REPLACE, (const guchar *) &value, 1);
+ } else {
+ gdk_property_delete (gdkwin, property);
+ }
+}
+
+static void
+legacy_menu_realized (GtkMenu *menu)
+{
+ set_legacy_menu_type (menu, TRUE);
+ g_signal_handlers_disconnect_by_func (menu, legacy_menu_realized, NULL);
+}
+
+static void
+legacy_menu_unmapped (GtkMenu *menu)
+{
+ set_legacy_menu_type (menu, FALSE);
+ g_signal_handlers_disconnect_by_func (menu, legacy_menu_unmapped, NULL);
+}
+
/*
* The menu popuping needs a menu popup-function
*/
HildonWindowPrivate *priv = HILDON_WINDOW_GET_PRIVATE (self);
g_list_free (menu_children);
+ /* Set the 'legacy app menu' property when the widget is realized */
+ if (GTK_WIDGET_REALIZED (menu)) {
+ set_legacy_menu_type (menu, TRUE);
+ } else {
+ g_signal_connect (menu, "realize",
+ G_CALLBACK (legacy_menu_realized), NULL);
+ }
+
+ /* Remove it when it's unmapped */
+ g_signal_connect (menu, "unmap",
+ G_CALLBACK (legacy_menu_unmapped), NULL);
+
/* Apply right theming */
gtk_widget_set_name (GTK_WIDGET (menu), "menu_force_with_corners");
* hildon_window_get_main_menu:
* @self: a #HildonWindow
*
- * Gets the #GtkMenu assigned to the #HildonAppview. Note that the
+ * Gets the #GtkMenu assigned to the #HildonWindow. Note that the
* window is still the owner of the menu.
*
* Note that if you're using a #HildonAppMenu rather than a #GtkMenu
* hildon_window_get_menu:
* @self: a #HildonWindow
*
+ * Gets the #GtkMenu assigned to @self
+ *
* Return value: a #GtkMenu
*
* Deprecated: In Hildon 2.2 this function has been renamed to