--- a/gntmenu.c Mon Nov 12 16:53:54 2007 +0000
+++ b/gntmenu.c Mon Nov 12 17:13:44 2007 +0000
@@ -235,7 +235,7 @@
find = find_item_with_trigger(nth->next, NULL, trigger);
find = find_item_with_trigger(menu->list, nth->next, trigger);
--- a/gntwindow.c Mon Nov 12 16:53:54 2007 +0000
+++ b/gntwindow.c Mon Nov 12 17:13:44 2007 +0000
@@ -28,6 +28,7 @@
GHashTable *accels; /* key => menuitem-id */
@@ -189,16 +190,33 @@
if (name && window->priv) {
if (!gnt_style_read_menu_accels(name, window->priv->accels)) {
g_hash_table_destroy(window->priv->accels);
+ window->priv->accels = NULL; const char * gnt_window_get_accel_item(GntWindow *window, const char *key)
+ if (window->priv->accels) return g_hash_table_lookup(window->priv->accels, key);
+void gnt_window_set_maximize(GntWindow *window, GntWindowFlags maximize) + if (maximize & GNT_WINDOW_MAXIMIZE_X) + window->priv->flags |= GNT_WINDOW_MAXIMIZE_X; + window->priv->flags &= ~GNT_WINDOW_MAXIMIZE_X; + if (maximize & GNT_WINDOW_MAXIMIZE_Y) + window->priv->flags |= GNT_WINDOW_MAXIMIZE_Y; + window->priv->flags &= ~GNT_WINDOW_MAXIMIZE_Y; +GntWindowFlags gnt_window_get_maximize(GntWindow *window) + return (window->priv->flags & (GNT_WINDOW_MAXIMIZE_X | GNT_WINDOW_MAXIMIZE_Y)); --- a/gntwindow.h Mon Nov 12 16:53:54 2007 +0000
+++ b/gntwindow.h Mon Nov 12 17:13:44 2007 +0000
@@ -48,6 +48,12 @@
typedef struct _GntWindowPriv GntWindowPriv;
typedef struct _GntWindowClass GntWindowClass;
+ GNT_WINDOW_MAXIMIZE_X = 1 << 0, + GNT_WINDOW_MAXIMIZE_Y = 1 << 1, @@ -112,6 +118,27 @@
const char * gnt_window_get_accel_item(GntWindow *window, const char *key);
+ * Maximize a window, either horizontally or vertically, or both. + * @param window The window to maximize. + * @param maximize The maximization state of the window. +void gnt_window_set_maximize(GntWindow *window, GntWindowFlags maximize); + * Get the maximization state of a window. + * @param window The window. + * @return The maximization state of the window. +GntWindowFlags gnt_window_get_maximize(GntWindow *window); void gnt_window_workspace_hiding(GntWindow *);
void gnt_window_workspace_showing(GntWindow *);
--- a/gntwm.c Mon Nov 12 16:53:54 2007 +0000
+++ b/gntwm.c Mon Nov 12 17:13:44 2007 +0000
@@ -224,17 +224,22 @@
-sanitize_position(GntWidget *widget, int *x, int *y)
+sanitize_position(GntWidget *widget, int *x, int *y, gboolean m) int X_MAX = getmaxx(stdscr);
int Y_MAX = getmaxy(stdscr) - 1;
gboolean changed = FALSE;
+ GntWindowFlags flags = GNT_IS_WINDOW(widget) ? + gnt_window_get_maximize(GNT_WINDOW(widget)) : 0; gnt_widget_get_size(widget, &w, &h);
+ if (m && (flags & GNT_WINDOW_MAXIMIZE_X) && *x != 0) { + } else if (*x + w > X_MAX) { @@ -243,7 +248,10 @@
+ if (m && (flags & GNT_WINDOW_MAXIMIZE_Y) && *y != 0) { + } else if (*y + h > Y_MAX) { @@ -255,7 +263,7 @@
-refresh_node(GntWidget *widget, GntNode *node, gpointer null)
+refresh_node(GntWidget *widget, GntNode *node, gpointer m) @@ -263,14 +271,28 @@
int X_MAX = getmaxx(stdscr);
int Y_MAX = getmaxy(stdscr) - 1;
+ GntWindowFlags flags = 0; + if (m && GNT_IS_WINDOW(widget)) { + flags = gnt_window_get_maximize(GNT_WINDOW(widget)); gnt_widget_get_position(widget, &x, &y);
gnt_widget_get_size(widget, &w, &h);
- if (sanitize_position(widget, &x, &y))
+ if (sanitize_position(widget, &x, &y, !!m)) gnt_screen_move_widget(widget, x, y);
+ if (flags & GNT_WINDOW_MAXIMIZE_X) + if (flags & GNT_WINDOW_MAXIMIZE_Y) gnt_screen_resize_widget(widget, nw, nh);
@@ -1607,7 +1629,7 @@
g_hash_table_replace(wm->nodes, widget, node);
- refresh_node(widget, node, NULL);
+ refresh_node(widget, node, GINT_TO_POINTER(TRUE)); transient = !!GNT_WIDGET_IS_FLAG_SET(node->me, GNT_WIDGET_TRANSIENT);
@@ -1682,7 +1704,7 @@
const char *title = GNT_BOX(widget)->title;
if (title && (p = g_hash_table_lookup(wm->positions, title)) != NULL) {
- sanitize_position(widget, &p->x, &p->y);
+ sanitize_position(widget, &p->x, &p->y, TRUE); gnt_widget_set_position(widget, p->x, p->y);
mvwin(widget->window, p->y, p->x);