summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Warmenhoven <eric@warmenhoven.org>2002-10-03 23:45:03 +0000
committerEric Warmenhoven <warmenhoven@src.gnome.org>2002-10-03 23:45:03 +0000
commitccc2ccf2218cf39232dbf6ea6dc2a0a59d844818 (patch)
tree0a897baf20fb085bdb478efcd4a8a63044fcd1f8
parent92fa22314615a62dc09ac6dbd64308f6ad2ec149 (diff)
downloadgtk+-ccc2ccf2218cf39232dbf6ea6dc2a0a59d844818.tar.gz
implement maximize for linux-fb
Thu Oct 3 16:40:18 2002 Eric Warmenhoven <eric@warmenhoven.org> * gdk/gdkevents.c, gdk/linux-fb/gdkwindow-fb.c, gtk/gtkwindow-decorate.c: implement maximize for linux-fb * gdk/linux-fb/gdkkeyboard-fb.c: implement raw keyboard mode * gdk/linux-fb/Makefile.am, gdk/linux-fb/gdkdnd-fb.c, gdk/linux-fb/gdkmain-fb.c, gdk/linux-fb/gdkselection-fb.c, gdk/linux-fb/miarc.c, gdk/linux-fb/mifpolycon.c, gdk/linux-fb/miwideline.c, gdk/linux-fb/mizerclip.c, gdk/linux-fb/mizerline.c: small cleanups
-rw-r--r--ChangeLog13
-rw-r--r--ChangeLog.pre-2-1013
-rw-r--r--ChangeLog.pre-2-213
-rw-r--r--ChangeLog.pre-2-413
-rw-r--r--ChangeLog.pre-2-613
-rw-r--r--ChangeLog.pre-2-813
-rw-r--r--gdk/gdkevents.c2
-rw-r--r--gdk/linux-fb/Makefile.am24
-rw-r--r--gdk/linux-fb/gdkdnd-fb.c6
-rw-r--r--gdk/linux-fb/gdkkeyboard-fb.c218
-rw-r--r--gdk/linux-fb/gdkmain-fb.c2
-rw-r--r--gdk/linux-fb/gdkselection-fb.c2
-rw-r--r--gdk/linux-fb/gdkwindow-fb.c8
-rw-r--r--gdk/linux-fb/miarc.c30
-rw-r--r--gdk/linux-fb/mifpolycon.c6
-rw-r--r--gdk/linux-fb/miwideline.c2
-rw-r--r--gdk/linux-fb/mizerclip.c6
-rw-r--r--gdk/linux-fb/mizerline.c4
-rw-r--r--gtk/gtkwindow-decorate.c146
19 files changed, 440 insertions, 94 deletions
diff --git a/ChangeLog b/ChangeLog
index f375952c50..fce05544e2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+Thu Oct 3 16:40:18 2002 Eric Warmenhoven <eric@warmenhoven.org>
+
+ * gdk/gdkevents.c, gdk/linux-fb/gdkwindow-fb.c,
+ gtk/gtkwindow-decorate.c: implement maximize for linux-fb
+
+ * gdk/linux-fb/gdkkeyboard-fb.c: implement raw keyboard mode
+
+ * gdk/linux-fb/Makefile.am, gdk/linux-fb/gdkdnd-fb.c,
+ gdk/linux-fb/gdkmain-fb.c, gdk/linux-fb/gdkselection-fb.c,
+ gdk/linux-fb/miarc.c, gdk/linux-fb/mifpolycon.c,
+ gdk/linux-fb/miwideline.c, gdk/linux-fb/mizerclip.c,
+ gdk/linux-fb/mizerline.c: small cleanups
+
Thu Oct 3 19:00:55 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkselection-x11.c (gdk_selection_property_get):
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index f375952c50..fce05544e2 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,16 @@
+Thu Oct 3 16:40:18 2002 Eric Warmenhoven <eric@warmenhoven.org>
+
+ * gdk/gdkevents.c, gdk/linux-fb/gdkwindow-fb.c,
+ gtk/gtkwindow-decorate.c: implement maximize for linux-fb
+
+ * gdk/linux-fb/gdkkeyboard-fb.c: implement raw keyboard mode
+
+ * gdk/linux-fb/Makefile.am, gdk/linux-fb/gdkdnd-fb.c,
+ gdk/linux-fb/gdkmain-fb.c, gdk/linux-fb/gdkselection-fb.c,
+ gdk/linux-fb/miarc.c, gdk/linux-fb/mifpolycon.c,
+ gdk/linux-fb/miwideline.c, gdk/linux-fb/mizerclip.c,
+ gdk/linux-fb/mizerline.c: small cleanups
+
Thu Oct 3 19:00:55 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkselection-x11.c (gdk_selection_property_get):
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index f375952c50..fce05544e2 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -1,3 +1,16 @@
+Thu Oct 3 16:40:18 2002 Eric Warmenhoven <eric@warmenhoven.org>
+
+ * gdk/gdkevents.c, gdk/linux-fb/gdkwindow-fb.c,
+ gtk/gtkwindow-decorate.c: implement maximize for linux-fb
+
+ * gdk/linux-fb/gdkkeyboard-fb.c: implement raw keyboard mode
+
+ * gdk/linux-fb/Makefile.am, gdk/linux-fb/gdkdnd-fb.c,
+ gdk/linux-fb/gdkmain-fb.c, gdk/linux-fb/gdkselection-fb.c,
+ gdk/linux-fb/miarc.c, gdk/linux-fb/mifpolycon.c,
+ gdk/linux-fb/miwideline.c, gdk/linux-fb/mizerclip.c,
+ gdk/linux-fb/mizerline.c: small cleanups
+
Thu Oct 3 19:00:55 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkselection-x11.c (gdk_selection_property_get):
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index f375952c50..fce05544e2 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,16 @@
+Thu Oct 3 16:40:18 2002 Eric Warmenhoven <eric@warmenhoven.org>
+
+ * gdk/gdkevents.c, gdk/linux-fb/gdkwindow-fb.c,
+ gtk/gtkwindow-decorate.c: implement maximize for linux-fb
+
+ * gdk/linux-fb/gdkkeyboard-fb.c: implement raw keyboard mode
+
+ * gdk/linux-fb/Makefile.am, gdk/linux-fb/gdkdnd-fb.c,
+ gdk/linux-fb/gdkmain-fb.c, gdk/linux-fb/gdkselection-fb.c,
+ gdk/linux-fb/miarc.c, gdk/linux-fb/mifpolycon.c,
+ gdk/linux-fb/miwideline.c, gdk/linux-fb/mizerclip.c,
+ gdk/linux-fb/mizerline.c: small cleanups
+
Thu Oct 3 19:00:55 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkselection-x11.c (gdk_selection_property_get):
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index f375952c50..fce05544e2 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,16 @@
+Thu Oct 3 16:40:18 2002 Eric Warmenhoven <eric@warmenhoven.org>
+
+ * gdk/gdkevents.c, gdk/linux-fb/gdkwindow-fb.c,
+ gtk/gtkwindow-decorate.c: implement maximize for linux-fb
+
+ * gdk/linux-fb/gdkkeyboard-fb.c: implement raw keyboard mode
+
+ * gdk/linux-fb/Makefile.am, gdk/linux-fb/gdkdnd-fb.c,
+ gdk/linux-fb/gdkmain-fb.c, gdk/linux-fb/gdkselection-fb.c,
+ gdk/linux-fb/miarc.c, gdk/linux-fb/mifpolycon.c,
+ gdk/linux-fb/miwideline.c, gdk/linux-fb/mizerclip.c,
+ gdk/linux-fb/mizerline.c: small cleanups
+
Thu Oct 3 19:00:55 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkselection-x11.c (gdk_selection_property_get):
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index f375952c50..fce05544e2 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,16 @@
+Thu Oct 3 16:40:18 2002 Eric Warmenhoven <eric@warmenhoven.org>
+
+ * gdk/gdkevents.c, gdk/linux-fb/gdkwindow-fb.c,
+ gtk/gtkwindow-decorate.c: implement maximize for linux-fb
+
+ * gdk/linux-fb/gdkkeyboard-fb.c: implement raw keyboard mode
+
+ * gdk/linux-fb/Makefile.am, gdk/linux-fb/gdkdnd-fb.c,
+ gdk/linux-fb/gdkmain-fb.c, gdk/linux-fb/gdkselection-fb.c,
+ gdk/linux-fb/miarc.c, gdk/linux-fb/mifpolycon.c,
+ gdk/linux-fb/miwideline.c, gdk/linux-fb/mizerclip.c,
+ gdk/linux-fb/mizerline.c: small cleanups
+
Thu Oct 3 19:00:55 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkselection-x11.c (gdk_selection_property_get):
diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c
index bab5ad5d41..2dfe0c82e2 100644
--- a/gdk/gdkevents.c
+++ b/gdk/gdkevents.c
@@ -1053,10 +1053,10 @@ gdk_synthesize_window_state (GdkWindow *window,
old = ((GdkWindowObject*) temp_event.window_state.window)->state;
- temp_event.window_state.changed_mask = (unset_flags | set_flags) ^ old;
temp_event.window_state.new_window_state = old;
temp_event.window_state.new_window_state |= set_flags;
temp_event.window_state.new_window_state &= ~unset_flags;
+ temp_event.window_state.changed_mask = temp_event.window_state.new_window_state ^ old;
if (temp_event.window_state.new_window_state == old)
return; /* No actual work to do, nothing changed. */
diff --git a/gdk/linux-fb/Makefile.am b/gdk/linux-fb/Makefile.am
index 31182c9c9c..8b6639d62c 100644
--- a/gdk/linux-fb/Makefile.am
+++ b/gdk/linux-fb/Makefile.am
@@ -29,9 +29,11 @@ libgdkinclude_HEADERS= \
libgdk_linux_fb_la_SOURCES = \
gdkcolor-fb.c \
gdkcursor-fb.c \
- gdkdnd-fb.c \
gdkdisplay-fb.c \
+ gdkdnd-fb.c \
gdkdrawable-fb2.c \
+ gdkevents-fb.c \
+ gdkfbmanager.h \
gdkfont-fb.c \
gdkgc-fb.c \
gdkgeometry-fb.c \
@@ -39,19 +41,19 @@ libgdk_linux_fb_la_SOURCES = \
gdkim-fb.c \
gdkimage-fb.c \
gdkinput.c \
+ gdkinputprivate.h \
+ gdkkeyboard-fb.c \
gdkmain-fb.c \
+ gdkmouse-fb.c \
+ gdkpango-fb.c \
gdkpixmap-fb.c \
+ gdkprivate-fb.h \
gdkproperty-fb.c \
- gdkselection-fb.c \
+ gdkrender-fb.c \
gdkscreen-fb.c \
+ gdkselection-fb.c \
gdkvisual-fb.c \
gdkwindow-fb.c \
- gdkprivate-fb.h \
- gdkinputprivate.h \
- gdkkeyboard-fb.c \
- gdkmouse-fb.c \
- gdkevents-fb.c \
- gdkrender-fb.c \
mi.h \
miarc.c \
midash.c \
@@ -65,16 +67,14 @@ libgdk_linux_fb_la_SOURCES = \
mipolygen.c \
mipolyutil.c \
miscanfill.h \
- mispans.h \
mispans.c \
+ mispans.h \
mistruct.h \
mitypes.h \
miwideline.c \
miwideline.h \
mizerclip.c \
- mizerline.c \
- gdkpango-fb.c \
- gdkfbmanager.h
+ mizerline.c
gdkfbmanager_sources = gdkfbmanager.c
gdkfbmanager_LDFLAGS = $(GLIB_LIBS)
diff --git a/gdk/linux-fb/gdkdnd-fb.c b/gdk/linux-fb/gdkdnd-fb.c
index d4d9ffa74a..3182ec7b9e 100644
--- a/gdk/linux-fb/gdkdnd-fb.c
+++ b/gdk/linux-fb/gdkdnd-fb.c
@@ -383,7 +383,7 @@ gdk_drag_get_protocol (guint32 xid,
{
GdkWindow *window;
- window = gdk_window_lookup (xid);
+ window = gdk_window_lookup ((GdkNativeWindow) xid);
if (GPOINTER_TO_INT (gdk_drawable_get_data (window, "gdk-dnd-registered")))
{
@@ -392,7 +392,7 @@ gdk_drag_get_protocol (guint32 xid,
}
*protocol = GDK_DRAG_PROTO_NONE;
- return GDK_NONE;
+ return 0;
}
static GdkWindow *
@@ -466,7 +466,7 @@ gdk_drag_find_window (GdkDragContext *context,
/* Check if new destination accepts drags, and which protocol */
if ((recipient = gdk_drag_get_protocol ((guint32)dest, protocol)))
{
- *dest_window = gdk_window_lookup (recipient);
+ *dest_window = gdk_window_lookup ((GdkNativeWindow) recipient);
gdk_window_ref (*dest_window);
}
else
diff --git a/gdk/linux-fb/gdkkeyboard-fb.c b/gdk/linux-fb/gdkkeyboard-fb.c
index 7c4eb0b844..1514a76f6a 100644
--- a/gdk/linux-fb/gdkkeyboard-fb.c
+++ b/gdk/linux-fb/gdkkeyboard-fb.c
@@ -817,6 +817,10 @@ xlate_io (GIOChannel *gioc,
gdk_fb_set_rotation (deg);
}
+ if ((xlate_codes[j].code == GDK_F8) &&
+ (xlate_codes[j].modifier & GDK_SHIFT_MASK))
+ exit (1);
+
gdk_fb_handle_key (xlate_codes[j].code,
xlate_codes[j].code,
@@ -1140,16 +1144,16 @@ static const guint trans_table[256][3] = {
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
- {0, 0, 0},
- {0, 0, 0},
- {0, 0, 0},
- {0, 0, 0},
- {0, 0, 0},
- {0, 0, 0},
- {0, 0, 0},
- {0, 0, 0},
- {0, 0, 0},
- {0, 0, 0},
+ {GDK_Home, 0, 0},
+ {GDK_Up, 0, 0},
+ {GDK_Page_Up, 0, 0},
+ {GDK_Left, 0, 0},
+ {GDK_Right, 0, 0},
+ {GDK_End, 0, 0},
+ {GDK_Down, 0, 0},
+ {GDK_Page_Down, 0, 0},
+ {GDK_Insert, 0, 0},
+ {GDK_Delete, 0, 0},
/* 0x70 */
{0, 0, 0},
@@ -1456,7 +1460,7 @@ raw_open (GdkFBKeyboard *kb)
if (ioctl (gdk_display->tty_fd, KDSKBMODE, K_MEDIUMRAW) < 0)
{
- g_warning ("setting tty to K_MEDIUMRAW failed");
+ g_warning ("setting tty to K_MEDIUMRAW failed (are you root?)");
return FALSE;
}
@@ -1491,47 +1495,185 @@ raw_close (GdkFBKeyboard *kb)
static guint
raw_lookup (GdkFBKeyboard *kb,
- const GdkKeymapKey *key)
+ const GdkKeymapKey *key)
{
- g_warning ("raw_lookup() NIY");
- return FALSE;
+ if (key->group != 0)
+ return 0;
+ if ((key->keycode < 0) || (key->keycode >= 256))
+ return 0;
+ if ((key->level < 0) || (key->level >= 3))
+ return 0;
+ return trans_table[key->keycode][key->level];
}
static gboolean
raw_translate (GdkFBKeyboard *kb,
- guint hardware_keycode,
- GdkModifierType state,
- gint group,
- guint *keyval,
- gint *effective_group,
- gint *level,
- GdkModifierType *consumed_modifiers)
+ guint hardware_keycode,
+ GdkModifierType state,
+ gint group,
+ guint *keyval,
+ gint *effective_group,
+ gint *level,
+ GdkModifierType *consumed_modifiers)
{
- g_warning ("raw_translate() NIY");
- return FALSE;
+ guint tmp_keyval;
+ gint tmp_level;
+
+ if (keyval)
+ *keyval = 0;
+ if (effective_group)
+ *effective_group = 0;
+ if (level)
+ *level = 0;
+ if (consumed_modifiers)
+ *consumed_modifiers = 0;
+
+ if ((hardware_keycode < 0) || (hardware_keycode >= 256))
+ return FALSE;
+
+ if (group != 0)
+ return FALSE;
+
+ if (state & GDK_CONTROL_MASK)
+ tmp_level = 2;
+ else if (state & GDK_SHIFT_MASK)
+ tmp_level = 1;
+ else
+ tmp_level = 0;
+
+ do {
+ tmp_keyval = trans_table[hardware_keycode][tmp_level --];
+ } while (!tmp_keyval && (tmp_level >= 0));
+
+ if (keyval)
+ *keyval = tmp_keyval;
+ if (level)
+ *level = tmp_level;
+
+ return TRUE;
}
static gboolean
raw_get_for_keyval (GdkFBKeyboard *kb,
- guint keyval,
- GdkKeymapKey **keys,
- gint *n_keys)
+ guint keyval,
+ GdkKeymapKey **keys,
+ gint *n_keys)
{
- g_warning ("raw_get_for_keyval() NIY");
- if (keys) *keys=NULL;
- if (n_keys) *n_keys=0;
- return FALSE;
+ GArray *retval;
+ int i, j;
+
+ retval = g_array_new (FALSE, FALSE, sizeof (GdkKeymapKey));
+
+ for (i = 0; i < 256; i++)
+ for (j = 0; j < 3; j++)
+ if (trans_table[i][j] == keyval)
+ {
+ GdkKeymapKey key;
+
+ key.keycode = i;
+ key.group = 0;
+ key.level = j;
+
+ g_array_append_val (retval, key);
+ }
+
+ if (retval->len > 0)
+ {
+ *keys = (GdkKeymapKey*) retval->data;
+ *n_keys = retval->len;
+ }
+ else
+ {
+ *keys = NULL;
+ *n_keys = 0;
+ }
+
+ g_array_free (retval, retval->len > 0 ? FALSE : TRUE);
+
+ return *n_keys > 0;
}
static gboolean
raw_get_for_keycode (GdkFBKeyboard *kb,
- guint hardware_keycode,
- GdkKeymapKey **keys,
- guint **keyvals,
- gint *n_entries)
+ guint hardware_keycode,
+ GdkKeymapKey **keys,
+ guint **keyvals,
+ gint *n_entries)
{
- g_warning ("raw_get_for_keycode() NIY");
- if (keys) *keys=NULL;
- if (n_entries) *n_entries=0;
- return FALSE;
+ GArray *key_array;
+ GArray *keyval_array;
+ int i;
+
+ if (hardware_keycode <= 0 ||
+ hardware_keycode >= 256)
+ {
+ if (keys)
+ *keys = NULL;
+ if (keyvals)
+ *keyvals = NULL;
+
+ *n_entries = 0;
+ return FALSE;
+ }
+
+ if (keys)
+ key_array = g_array_new (FALSE, FALSE, sizeof (GdkKeymapKey));
+ else
+ key_array = NULL;
+
+ if (keyvals)
+ keyval_array = g_array_new (FALSE, FALSE, sizeof (guint));
+ else
+ keyval_array = NULL;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (key_array)
+ {
+ GdkKeymapKey key;
+
+ key.keycode = hardware_keycode;
+ key.group = 0;
+ key.level = i;
+
+ g_array_append_val (key_array, key);
+ }
+
+ if (keyval_array)
+ {
+ g_array_append_val (keyval_array, trans_table[hardware_keycode][i]);
+ }
+ }
+
+ if ((key_array && key_array->len > 0) ||
+ (keyval_array && keyval_array->len > 0))
+ {
+ if (keys)
+ *keys = (GdkKeymapKey*) key_array->data;
+
+ if (keyvals)
+ *keyvals = (guint*) keyval_array->data;
+
+ if (key_array)
+ *n_entries = key_array->len;
+ else
+ *n_entries = keyval_array->len;
+ }
+ else
+ {
+ if (keys)
+ *keys = NULL;
+
+ if (keyvals)
+ *keyvals = NULL;
+
+ *n_entries = 0;
+ }
+
+ if (key_array)
+ g_array_free (key_array, key_array->len > 0 ? FALSE : TRUE);
+ if (keyval_array)
+ g_array_free (keyval_array, keyval_array->len > 0 ? FALSE : TRUE);
+
+ return *n_entries > 0;
}
diff --git a/gdk/linux-fb/gdkmain-fb.c b/gdk/linux-fb/gdkmain-fb.c
index 4e3868ee58..ec6569575a 100644
--- a/gdk/linux-fb/gdkmain-fb.c
+++ b/gdk/linux-fb/gdkmain-fb.c
@@ -409,7 +409,7 @@ gdk_fb_setup_mode_from_name (struct fb_var_screeninfo *modeinfo,
scanner->input_name = filename;
for (i = 0; i < sizeof(fb_modes_keywords)/sizeof(fb_modes_keywords[0]); i++)
- g_scanner_add_symbol (scanner, fb_modes_keywords[i], GINT_TO_POINTER (i));
+ g_scanner_scope_add_symbol (scanner, 0, fb_modes_keywords[i], GINT_TO_POINTER (i));
g_scanner_input_file (scanner, fd);
diff --git a/gdk/linux-fb/gdkselection-fb.c b/gdk/linux-fb/gdkselection-fb.c
index e4ec724ece..a62ff130c5 100644
--- a/gdk/linux-fb/gdkselection-fb.c
+++ b/gdk/linux-fb/gdkselection-fb.c
@@ -216,7 +216,7 @@ gdk_selection_send_notify_for_display (GdkDisplay *display,
GdkEvent *event;
GdkWindow *event_window;
- event_window = gdk_fb_other_event_window (gdk_window_lookup (requestor), GDK_SELECTION_NOTIFY);
+ event_window = gdk_fb_other_event_window (gdk_window_lookup ((GdkNativeWindow) requestor), GDK_SELECTION_NOTIFY);
if (event_window)
{
event = gdk_event_make (event_window, GDK_SELECTION_NOTIFY, TRUE);
diff --git a/gdk/linux-fb/gdkwindow-fb.c b/gdk/linux-fb/gdkwindow-fb.c
index 1586761c7d..eab26faca2 100644
--- a/gdk/linux-fb/gdkwindow-fb.c
+++ b/gdk/linux-fb/gdkwindow-fb.c
@@ -2154,7 +2154,9 @@ gdk_window_maximize (GdkWindow *window)
{
g_return_if_fail (GDK_IS_WINDOW (window));
- g_warning ("gdk_window_maximize() not implemented.\n");
+ gdk_synthesize_window_state (window,
+ 0,
+ GDK_WINDOW_STATE_MAXIMIZED);
}
void
@@ -2162,7 +2164,9 @@ gdk_window_unmaximize (GdkWindow *window)
{
g_return_if_fail (GDK_IS_WINDOW (window));
- /* g_warning ("gdk_window_unmaximize() not implemented.\n");*/
+ gdk_synthesize_window_state (window,
+ GDK_WINDOW_STATE_MAXIMIZED,
+ 0);
}
void
diff --git a/gdk/linux-fb/miarc.c b/gdk/linux-fb/miarc.c
index 9d263afc54..a4836d0334 100644
--- a/gdk/linux-fb/miarc.c
+++ b/gdk/linux-fb/miarc.c
@@ -401,8 +401,8 @@ miComputeCircleSpans(int lw, miArc *parc, miArcSpanData *spdata)
register int x, y, e;
int xk, yk, xm, ym, dx, dy;
register int slw, inslw;
- int inx, iny, ine;
- int inxk, inyk, inxm, inym;
+ int inx = 0, iny, ine = 0;
+ int inxk = 0, inyk = 0, inxm = 0, inym = 0;
doinner = -lw;
slw = parc->width - doinner;
@@ -464,7 +464,7 @@ miComputeEllipseSpans(int lw, miArc *parc, miArcSpanData *spdata)
register miArcSpan *span;
double w, h, r, xorg;
double Hs, Hf, WH, K, Vk, Nk, Fk, Vr, N, Nc, Z, rs;
- double A, T, b, d, x, y, t, inx, outx, hepp, hepm;
+ double A, T, b, d, x, y, t, inx, outx = 0.0, hepp, hepm;
int flip, solution;
w = (double)parc->width / 2.0;
@@ -986,8 +986,8 @@ miPolyArc(GdkDrawable *pDraw, GdkGC *pGC, int narcs, miArc *parcs)
register int i;
miArc *parc;
int xMin, xMax, yMin, yMax;
- int pixmapWidth, pixmapHeight;
- int xOrg, yOrg;
+ int pixmapWidth = 0, pixmapHeight = 0;
+ int xOrg = 0, yOrg = 0;
int width;
gboolean fTricky;
GdkDrawable* pDrawTo;
@@ -1243,7 +1243,7 @@ miArcJoin (GdkDrawable *pDraw, GdkGC *pGC, miArcFacePtr pLeft, miArcFacePtr pRig
int cpt;
SppArcRec arc;
miArcFaceRec Right, Left;
- int polyLen;
+ int polyLen = 0;
int xOrg, yOrg;
double xFtrans, yFtrans;
double a;
@@ -1746,7 +1746,7 @@ computeDashMap (arcp, map)
dashMap *map;
{
int di;
- double a, x, y, prevx, prevy, dist;
+ double a, x, y, prevx = 0.0, prevy = 0.0, dist;
for (di = 0; di < DASH_MAP_SIZE; di++) {
a = dashIndexToAngle (di);
@@ -1773,7 +1773,7 @@ miComputeArcs (miArc *parcs, int narcs, GdkGC *pGC)
int isDashed, isDoubleDash;
int dashOffset;
miPolyArcPtr arcs;
- int start, i, j, k, nexti, nextk;
+ int start, i, j, k = 0, nexti, nextk = 0;
int joinSize[2];
int capSize[2];
int arcSize[2];
@@ -1782,13 +1782,13 @@ miComputeArcs (miArc *parcs, int narcs, GdkGC *pGC)
struct arcData *data;
miArcDataPtr arc;
miArc xarc;
- int iphase, prevphase, joinphase;
+ int iphase, prevphase = 0, joinphase;
int arcsJoin;
int selfJoin;
- int iDash, dashRemaining;
- int iDashStart, dashRemainingStart, iphaseStart;
- int startAngle, spanAngle, endAngle, backwards;
+ int iDash = 0, dashRemaining;
+ int iDashStart = 0, dashRemainingStart = 0, iphaseStart;
+ int startAngle, spanAngle, endAngle, backwards = 0;
int prevDashAngle, dashAngle;
dashMap map;
@@ -2330,7 +2330,7 @@ drawZeroArc (pDraw, pGC, tarc, lw, left, right)
int lw;
miArcFacePtr right, left;
{
- double x0, y0, x1, y1, w, h, x, y;
+ double x0 = 0.0, y0 = 0.0, x1 = 0.0, y1 = 0.0, w, h, x, y;
double xmax, ymax, xmin, ymin;
int a0, a1;
double a, startAngle, endAngle;
@@ -3222,9 +3222,9 @@ drawArc (miArc *tarc, int l, int a0, int a1, miArcFacePtr right, miArcFacePtr le
struct arc_def def;
struct accelerators acc;
int startq, endq, curq;
- int rightq, leftq, righta, lefta;
+ int rightq, leftq = 0, righta = 0, lefta = 0;
miArcFacePtr passRight, passLeft;
- int q0, q1, mask;
+ int q0 = 0, q1 = 0, mask;
struct band {
int a0, a1;
int mask;
diff --git a/gdk/linux-fb/mifpolycon.c b/gdk/linux-fb/mifpolycon.c
index 4b266b0dfb..dc1972157a 100644
--- a/gdk/linux-fb/mifpolycon.c
+++ b/gdk/linux-fb/mifpolycon.c
@@ -79,9 +79,9 @@ miFillSppPoly(GdkDrawable *dst, GdkGC *pgc, int count, SppPointPtr ptsIn, int xT
*/
#endif
{
- double xl, xr, /* x vals of left and right edges */
- ml, /* left edge slope */
- mr, /* right edge slope */
+ double xl = 0.0, xr = 0.0, /* x vals of left and right edges */
+ ml = 0.0, /* left edge slope */
+ mr = 0.0, /* right edge slope */
dy, /* delta y */
i; /* loop counter */
int y, /* current scanline */
diff --git a/gdk/linux-fb/miwideline.c b/gdk/linux-fb/miwideline.c
index 128014cd24..758b187b46 100644
--- a/gdk/linux-fb/miwideline.c
+++ b/gdk/linux-fb/miwideline.c
@@ -81,7 +81,7 @@ miFillPolyHelper (pDrawable, pGC, pixel, spanData, y, overall_height,
int left_height = 0, right_height = 0;
register GdkSpan* ppt;
- GdkSpan* pptInit;
+ GdkSpan* pptInit = NULL;
GdkColor oldPixel;
int xorg;
Spans spanRec;
diff --git a/gdk/linux-fb/mizerclip.c b/gdk/linux-fb/mizerclip.c
index 145ccd9551..f3e55f8233 100644
--- a/gdk/linux-fb/mizerclip.c
+++ b/gdk/linux-fb/mizerclip.c
@@ -406,13 +406,13 @@ miZeroClipLine(xmin, ymin, xmax, ymax,
{
int swapped = 0;
int clipDone = 0;
- guint32 utmp;
+ guint32 utmp = 0;
int clip1, clip2;
int x1, y1, x2, y2;
int x1_orig, y1_orig, x2_orig, y2_orig;
int xmajor;
- int negslope, anchorval;
- unsigned int eqn;
+ int negslope = 0, anchorval = 0;
+ unsigned int eqn = 0;
x1 = x1_orig = *new_x1;
y1 = y1_orig = *new_y1;
diff --git a/gdk/linux-fb/mizerline.c b/gdk/linux-fb/mizerline.c
index 4c2adf040b..700cd038fb 100644
--- a/gdk/linux-fb/mizerline.c
+++ b/gdk/linux-fb/mizerline.c
@@ -92,13 +92,13 @@ miZeroLine(pDraw, pGC, mode, npt, pptInit)
int npt; /* number of points */
GdkPoint* pptInit;
{
- int Nspans, current_y;
+ int Nspans, current_y = 0;
GdkPoint* ppt;
GdkSpan* pspanInit, *spans;
int list_len;
int xleft, ytop, xright, ybottom;
int new_x1, new_y1, new_x2, new_y2;
- int x, y, x1, y1, x2, y2, xstart, ystart;
+ int x = 0, y = 0, x1, y1, x2, y2, xstart, ystart;
int oc1, oc2;
int result;
int pt1_clipped, pt2_clipped = 0;
diff --git a/gtk/gtkwindow-decorate.c b/gtk/gtkwindow-decorate.c
index 68a23d00fc..3d7747df00 100644
--- a/gtk/gtkwindow-decorate.c
+++ b/gtk/gtkwindow-decorate.c
@@ -36,6 +36,7 @@
typedef enum
{
GTK_WINDOW_REGION_TITLE,
+ GTK_WINDOW_REGION_MAXIMIZE,
GTK_WINDOW_REGION_CLOSE,
GTK_WINDOW_REGION_BR_RESIZE
} GtkWindowRegionType;
@@ -68,6 +69,7 @@ struct _GtkWindowDecoration
GtkWindowRegion *regions;
gint last_x, last_y;
+ gint last_w, last_h;
PangoLayout *title_layout;
@@ -75,6 +77,9 @@ struct _GtkWindowDecoration
gboolean moving : 1;
gboolean closing : 1;
+ gboolean maximizing : 1;
+ gboolean maximized : 1;
+ gboolean maximizable : 1;
gboolean decorated : 1;
gboolean real_inner_move : 1;
gboolean focused : 1;
@@ -102,6 +107,8 @@ static gint gtk_decorated_window_button_release (GtkWidget *widget,
GdkEventButton *event);
static gint gtk_decorated_window_motion_notify (GtkWidget *widget,
GdkEventMotion *event);
+static gint gtk_decorated_window_window_state (GtkWidget *widget,
+ GdkEventWindowState *event);
static void gtk_decorated_window_paint (GtkWidget *widget,
GdkRectangle *area);
static gint gtk_decorated_window_focus_change (GtkWidget *widget,
@@ -133,6 +140,9 @@ gtk_decorated_window_init (GtkWindow *window)
deco->moving = FALSE;
deco->decorated = TRUE;
deco->closing = FALSE;
+ deco->maximizing = FALSE;
+ deco->maximized = FALSE;
+ deco->maximizable = FALSE;
deco->real_inner_move = FALSE;
g_object_set_data_full (G_OBJECT (window), "gtk-window-decoration", deco,
@@ -189,12 +199,20 @@ gtk_decorated_window_calculate_frame_size (GtkWindow *window)
{
if ((decorations & GDK_DECOR_BORDER) &&
(decorations & GDK_DECOR_TITLE))
- deco->decorated = TRUE;
+ {
+ deco->decorated = TRUE;
+ if ((decorations & GDK_DECOR_MAXIMIZE) &&
+ (gtk_window_get_type_hint (window) == GDK_WINDOW_TYPE_HINT_NORMAL))
+ deco->maximizable = TRUE;
+ }
else
deco->decorated = FALSE;
}
else
- deco->decorated = (window->type != GTK_WINDOW_POPUP);
+ {
+ deco->decorated = (window->type != GTK_WINDOW_POPUP);
+ deco->maximizable = (gtk_window_get_type_hint (window) == GDK_WINDOW_TYPE_HINT_NORMAL);
+ }
if (deco->decorated)
gtk_window_set_frame_dimensions (window,
@@ -312,6 +330,8 @@ gtk_decorated_window_frame_event (GtkWindow *window, GdkEvent *event)
break;
case GDK_BUTTON_RELEASE:
return gtk_decorated_window_button_release (widget, (GdkEventButton *)event);
+ case GDK_WINDOW_STATE:
+ return gtk_decorated_window_window_state (widget, (GdkEventWindowState *)event);
default:
break;
}
@@ -441,22 +461,32 @@ gtk_decorated_window_button_press (GtkWidget *widget,
type = gtk_decorated_window_region_type (window, x, y);
- deco->last_x = x;
- deco->last_y = y;
-
switch (type)
{
case GTK_WINDOW_REGION_TITLE:
+ if (!deco->maximized && event->state & GDK_BUTTON1_MASK)
+ {
+ deco->last_x = x;
+ deco->last_y = y;
+ deco->moving = TRUE;
+ }
+ break;
+ case GTK_WINDOW_REGION_MAXIMIZE:
if (event->state & GDK_BUTTON1_MASK)
- deco->moving = TRUE;
+ deco->maximizing = TRUE;
break;
case GTK_WINDOW_REGION_CLOSE:
if (event->state & GDK_BUTTON1_MASK)
deco->closing = TRUE;
break;
case GTK_WINDOW_REGION_BR_RESIZE:
- if (event->state & GDK_BUTTON1_MASK)
- deco->resize = RESIZE_BOTTOM_RIGHT;
+ if (!deco->maximized)
+ {
+ if (event->state & GDK_BUTTON1_MASK)
+ deco->resize = RESIZE_BOTTOM_RIGHT;
+ deco->last_x = x;
+ deco->last_y = y;
+ }
break;
default:
break;
@@ -491,13 +521,67 @@ gtk_decorated_window_button_release (GtkWidget *widget,
gdk_event_free (event);
}
}
+ else if (deco->maximizing)
+ {
+ type = gtk_decorated_window_region_type (window, event->x, event->y);
+ if (type == GTK_WINDOW_REGION_MAXIMIZE)
+ {
+ if (deco->maximized)
+ gtk_window_unmaximize (window);
+ else
+ gtk_window_maximize (window);
+ }
+ }
deco->closing = FALSE;
+ deco->maximizing = FALSE;
deco->moving = FALSE;
deco->resize = RESIZE_NONE;
return TRUE;
}
+static gint
+gtk_decorated_window_window_state (GtkWidget *widget,
+ GdkEventWindowState *event)
+{
+ GtkWindow *window;
+ GtkWindowDecoration *deco;
+ GdkWindowObject *priv;
+
+ window = GTK_WINDOW (widget);
+ deco = get_decoration (window);
+ priv = GDK_WINDOW_OBJECT (window->frame);
+
+ if (event->changed_mask & GDK_WINDOW_STATE_MAXIMIZED)
+ {
+ if (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED)
+ {
+ int w, h;
+ gdk_window_get_geometry (widget->window, NULL, NULL,
+ &deco->last_w, &deco->last_h, NULL);
+ gdk_window_get_origin (widget->window, &deco->last_x, &deco->last_y);
+ w = gdk_screen_get_width(gdk_screen_get_default()) - DECORATION_BORDER_TOT_X;
+ h = gdk_screen_get_height(gdk_screen_get_default()) - DECORATION_BORDER_TOT_Y;
+ _gtk_window_constrain_size (window, w, h, &w, &h);
+ if (w != deco->last_w || h != deco->last_h)
+ {
+ _gtk_window_reposition (window, DECORATION_BORDER_LEFT, DECORATION_BORDER_TOP);
+ gdk_window_resize (widget->window, w, h);
+ deco->maximized = TRUE;
+ }
+ }
+ else
+ {
+ _gtk_window_reposition (window, deco->last_x, deco->last_y);
+ _gtk_window_constrain_size (window, deco->last_w, deco->last_h,
+ &deco->last_w, &deco->last_h);
+ gdk_window_resize (widget->window, deco->last_w, deco->last_h);
+ deco->maximized = FALSE;
+ }
+ }
+ return TRUE;
+}
+
static void
gtk_decorated_window_paint (GtkWidget *widget,
GdkRectangle *area)
@@ -551,6 +635,31 @@ gtk_decorated_window_paint (GtkWidget *widget,
DECORATION_BORDER_LEFT - 2, DECORATION_BORDER_TOP - 2,
width - (DECORATION_BORDER_LEFT + DECORATION_BORDER_RIGHT) + 3,
height - (DECORATION_BORDER_TOP + DECORATION_BORDER_BOTTOM) + 3);
+
+ if (deco->maximizable)
+ {
+ /* Maximize button: */
+
+ x1 = width - (DECORATION_BORDER_LEFT * 2) - (DECORATION_BUTTON_SIZE * 2);
+ y1 = DECORATION_BUTTON_Y_OFFSET;
+ x2 = x1 + DECORATION_BUTTON_SIZE;
+ y2 = y1 + DECORATION_BUTTON_SIZE;
+
+ if (area)
+ gdk_gc_set_clip_rectangle (widget->style->bg_gc[widget->state], area);
+
+ gdk_draw_rectangle (frame, widget->style->bg_gc[widget->state], TRUE,
+ x1, y1, x2 - x1, y2 - y1);
+
+ gdk_draw_line (frame, widget->style->black_gc, x1 + 1, y1 + 1, x2 - 2, y1 + 1);
+
+ gdk_draw_rectangle (frame, widget->style->black_gc, FALSE,
+ x1 + 1, y1 + 2,
+ DECORATION_BUTTON_SIZE - 3, DECORATION_BUTTON_SIZE - 4);
+
+ if (area)
+ gdk_gc_set_clip_rectangle (widget->style->black_gc, NULL);
+ }
/* Close button: */
@@ -584,14 +693,14 @@ gtk_decorated_window_paint (GtkWidget *widget,
if (deco->title_layout)
{
if (area)
- gdk_gc_set_clip_rectangle (widget->style->fg_gc [widget->state], area);
+ gdk_gc_set_clip_rectangle (widget->style->fg_gc [border_state], area);
gdk_draw_layout (frame,
- widget->style->fg_gc [widget->state],
+ widget->style->fg_gc [border_state],
DECORATION_BORDER_LEFT, 1,
deco->title_layout);
if (area)
- gdk_gc_set_clip_rectangle (widget->style->fg_gc [widget->state], NULL);
+ gdk_gc_set_clip_rectangle (widget->style->fg_gc [border_state], NULL);
}
}
@@ -612,6 +721,8 @@ gtk_decorated_window_recalculate_regions (GtkWindow *window)
return;
n_regions += 2; /* close, Title */
+ if (deco->maximizable)
+ n_regions += 1;
if (window->allow_shrink || window->allow_grow)
n_regions += 2;
@@ -627,9 +738,20 @@ gtk_decorated_window_recalculate_regions (GtkWindow *window)
region = deco->regions;
+ /* Maximize button */
+ if (deco->maximizable)
+ {
+ region->rect.x = width - (DECORATION_BORDER_LEFT * 2) - (DECORATION_BUTTON_SIZE * 2);
+ region->rect.y = DECORATION_BUTTON_Y_OFFSET;
+ region->rect.width = DECORATION_BUTTON_SIZE;
+ region->rect.height = DECORATION_BUTTON_SIZE;
+ region->type = GTK_WINDOW_REGION_MAXIMIZE;
+ region++;
+ }
+
/* Close button */
region->rect.x = width - DECORATION_BORDER_LEFT - DECORATION_BUTTON_SIZE;
- region->rect.y = 2;
+ region->rect.y = DECORATION_BUTTON_Y_OFFSET;
region->rect.width = DECORATION_BUTTON_SIZE;
region->rect.height = DECORATION_BUTTON_SIZE;
region->type = GTK_WINDOW_REGION_CLOSE;