gtk/gdk/nanox/gdkwindow-nanox.c
Paolo Molaro 8a836c07cf Sat, 6 May 2000 13:31:34 +0200 Paolo Molaro <lupus@linuxcare.com>
Sat,  6 May 2000 13:31:34 +0200 Paolo Molaro <lupus@linuxcare.com>

	* gdk/nanox/*: nano-X port work in progress.
	* gdk/simple.c: simple test for Gdk.
	* README.nanox: notes about the port: read this first!
	* gtk/gtk{dnd,plug,selection,window}.c: minimal changes to make gtk compile
	with nano-X.
2000-05-06 11:57:31 +00:00

601 lines
12 KiB
C

#include "gdk.h"
#include "config.h"
#include "gdkwindow.h"
#include "gdkprivate-nanox.h"
#include "gdkprivate.h"
static void create_toplevel (GR_WINDOW_ID parent, GR_WINDOW_ID win, int x, int y, int width, int height);
static int manage_event (GR_EVENT *event);
static void set_title (GR_WINDOW_ID win, char* title);
typedef struct {
char * name;
void (*create_toplevel) (GR_WINDOW_ID parent, GR_WINDOW_ID win, int x, int y, int width, int height);
int (*manage_event) (GR_EVENT *event);
void (*set_title) (GR_WINDOW_ID win, char* title);
} GdkWindowManager;
typedef struct {
GR_WINDOW_ID pwin;
GR_WINDOW_ID win;
char *title;
GdkWMFunction functions;
GdkWMDecoration decors;
} WMInfo;
static GdkWindowManager test_wm = {
"test",
create_toplevel,
manage_event,
set_title
};
static GdkWindowManager *default_wm = &test_wm;
static GHashTable * wm_hash = NULL;
GdkDrawableClass _gdk_windowing_window_class;
static void create_toplevel (GR_WINDOW_ID parent, GR_WINDOW_ID win, int x, int y, int width, int height)
{
WMInfo *winfo;
winfo = g_new0(WMInfo, 1);
winfo->pwin = GrNewWindow(parent, x, y-20, width, height+20, 0, RGB(150, 50,150), WHITE);
winfo->win = win;
GrReparentWindow(winfo->pwin, win, 20, 0);
if (!wm_hash)
wm_hash = g_hash_table_new(g_int_hash, g_int_equal);
g_hash_table_insert(wm_hash, winfo->pwin, winfo);
}
static int manage_event (GR_EVENT *event) {
return 0;
}
static void set_title (GR_WINDOW_ID win, char* title) {
}
static void
gdk_nanox_window_destroy (GdkDrawable *drawable)
{
if (!GDK_DRAWABLE_DESTROYED (drawable))
{
if (GDK_DRAWABLE_TYPE (drawable) == GDK_WINDOW_FOREIGN)
gdk_xid_table_remove (GDK_DRAWABLE_XID (drawable));
else
g_warning ("losing last reference to undestroyed window\n");
}
g_free (GDK_DRAWABLE_XDATA (drawable));
}
static GdkWindowPrivate*
gdk_window_nanox_alloc() {
GdkWindow *window;
GdkWindowPrivate *private;
static GdkDrawableClass klass;
static gboolean initialized = FALSE;
if (!initialized)
{
initialized = TRUE;
klass = _gdk_nanox_drawable_class;
klass.destroy = gdk_nanox_window_destroy;
}
window = _gdk_window_alloc ();
private = (GdkWindowPrivate *)window;
private->drawable.klass = &klass;
private->drawable.klass_data = g_new (GdkDrawableXData, 1);
return window;
}
static void
gdk_window_internal_destroy (GdkWindow *window,
gboolean xdestroy,
gboolean our_destroy)
{
}
GR_WINDOW_ID gdk_root_window = GR_ROOT_WINDOW_ID;
void
gdk_window_init (void)
{
GdkWindowPrivate *private;
gdk_parent_root = gdk_window_nanox_alloc ();
private = (GdkWindowPrivate *)gdk_parent_root;
GDK_DRAWABLE_XDATA (gdk_parent_root)->xid = gdk_root_window;
private->drawable.window_type = GDK_WINDOW_ROOT;
private->drawable.width = gdk_screen_width();
private->drawable.height = gdk_screen_height();
gdk_window_set_events(private, -1);
gdk_xid_table_insert (&gdk_root_window, gdk_parent_root);
}
GdkWindow*
gdk_window_new (GdkWindow *parent,
GdkWindowAttr *attributes,
gint attributes_mask)
{
GR_WINDOW_ID new_win;
GdkWindowPrivate *private, *parent_private;
int x, y, width, height;
int border = 1;
if (!parent)
parent = gdk_parent_root;
if (GDK_DRAWABLE_DESTROYED (parent))
return NULL;
private->parent = parent;
parent_private = (GdkWindowPrivate*)parent;
if (attributes_mask & GDK_WA_X)
x = attributes->x;
else
x = 0;
if (attributes_mask & GDK_WA_Y)
y = attributes->y;
else
y = 0;
width = attributes->width;
height = attributes->height;
private = gdk_window_nanox_alloc();
private->x = x;
private->y = y;
private->drawable.width = (attributes->width > 1) ? (attributes->width) : (1);
private->drawable.height = (attributes->height > 1) ? (attributes->height) : (1);
private->drawable.window_type = attributes->window_type;
if (attributes->window_type == GDK_WINDOW_TOPLEVEL || attributes->window_type == GDK_WINDOW_DIALOG)
border = 2;
/* if toplevel reparent to our own window managed window... (check override_redirect) */
if (attributes->wclass == GDK_INPUT_OUTPUT)
new_win = GrNewWindow(GDK_WINDOW_XWINDOW(parent), x, y, width, height, border, RGB(150,150,150), WHITE);
else
new_win = GrNewInputWindow(GDK_WINDOW_XWINDOW(parent), x, y, width, height);
GDK_DRAWABLE_XDATA(private)->xid = new_win;
gdk_drawable_ref(private);
private->drawable.colormap = gdk_colormap_get_system ();
gdk_xid_table_insert (&GDK_DRAWABLE_XID(private), private);
g_message("created window %d %d %d %d %d", new_win, x, y, width, height);
GrSelectEvents(GDK_DRAWABLE_XID(private), -1);
return (GdkWindow*)private;;
}
GdkWindow *
gdk_window_foreign_new (guint32 anid)
{
g_message("unimplemented %s", __FUNCTION__);
return NULL;
}
void
gdk_window_destroy (GdkWindow *window)
{
gdk_window_internal_destroy (window, TRUE, TRUE);
gdk_drawable_unref (window);
}
void
gdk_window_destroy_notify (GdkWindow *window)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_show (GdkWindow *window)
{
GdkWindowPrivate *private;
g_return_if_fail (window != NULL);
private = (GdkWindowPrivate*) window;
if (!private->drawable.destroyed)
{
private->mapped = TRUE;
GrRaiseWindow (GDK_DRAWABLE_XID (window));
GrMapWindow (GDK_DRAWABLE_XID (window));
}
}
void
gdk_window_hide (GdkWindow *window)
{
GdkWindowPrivate *private;
g_return_if_fail (window != NULL);
private = (GdkWindowPrivate*) window;
if (!private->drawable.destroyed)
{
private->mapped = FALSE;
GrUnmapWindow (GDK_DRAWABLE_XID (window));
}
}
void
gdk_window_raise (GdkWindow *window)
{
g_return_if_fail (window != NULL);
g_return_if_fail (GDK_IS_WINDOW (window));
if (!GDK_DRAWABLE_DESTROYED (window))
GrRaiseWindow (GDK_DRAWABLE_XID (window));
}
void
gdk_window_lower (GdkWindow *window)
{
g_return_if_fail (window != NULL);
g_return_if_fail (GDK_IS_WINDOW (window));
if (!GDK_DRAWABLE_DESTROYED (window))
GrLowerWindow (GDK_DRAWABLE_XID (window));
}
void
gdk_window_withdraw (GdkWindow *window)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_move (GdkWindow *window,
gint x,
gint y)
{
GrMoveWindow(GDK_DRAWABLE_XID(window), x, y);
}
void
gdk_window_resize (GdkWindow *window,
gint width,
gint height)
{
GrResizeWindow(GDK_DRAWABLE_XID(window), width, height);
}
void
gdk_window_move_resize (GdkWindow *window,
gint x,
gint y,
gint width,
gint height)
{
GrMoveWindow(GDK_DRAWABLE_XID(window), x, y);
GrResizeWindow(GDK_DRAWABLE_XID(window), width, height);
}
void
gdk_window_reparent (GdkWindow *window,
GdkWindow *new_parent,
gint x,
gint y)
{
GrReparentWindow(GDK_DRAWABLE_XID(window), GDK_DRAWABLE_XID(new_parent), x, y);
}
void
gdk_window_clear (GdkWindow *window)
{
g_return_if_fail (window != NULL);
g_return_if_fail (GDK_IS_WINDOW (window));
if (!GDK_DRAWABLE_DESTROYED (window))
GrClearWindow (GDK_DRAWABLE_XID (window), 0);
}
void
_gdk_windowing_window_clear_area (GdkWindow *window,
gint x,
gint y,
gint width,
gint height)
{
g_return_if_fail (window != NULL);
g_return_if_fail (GDK_IS_WINDOW (window));
if (!GDK_DRAWABLE_DESTROYED (window))
GrClearWindow (GDK_DRAWABLE_XID (window), 0);
}
void
_gdk_windowing_window_clear_area_e (GdkWindow *window,
gint x,
gint y,
gint width,
gint height)
{
g_return_if_fail (window != NULL);
g_return_if_fail (GDK_IS_WINDOW (window));
if (!GDK_DRAWABLE_DESTROYED (window))
GrClearWindow (GDK_DRAWABLE_XID (window), 1);
}
void
gdk_window_set_hints (GdkWindow *window,
gint x,
gint y,
gint min_width,
gint min_height,
gint max_width,
gint max_height,
gint flags)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_set_geometry_hints (GdkWindow *window,
GdkGeometry *geometry,
GdkWindowHints geom_mask)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_set_title (GdkWindow *window,
const gchar *title)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_set_role (GdkWindow *window,
const gchar *role)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_set_transient_for (GdkWindow *window,
GdkWindow *parent)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_set_background (GdkWindow *window,
GdkColor *color)
{
g_return_if_fail (window != NULL);
g_return_if_fail (GDK_IS_WINDOW (window));
g_message("unimplemented %s", __FUNCTION__);
if (GDK_DRAWABLE_DESTROYED (window))
return;
}
void
gdk_window_set_back_pixmap (GdkWindow *window,
GdkPixmap *pixmap,
gboolean parent_relative)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_set_cursor (GdkWindow *window,
GdkCursor *cursor)
{
}
void
gdk_window_get_geometry (GdkWindow *window,
gint *x,
gint *y,
gint *width,
gint *height,
gint *depth)
{
GR_WINDOW_INFO winfo;
g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
if (!window)
window = gdk_parent_root;
if (!GDK_DRAWABLE_DESTROYED (window))
{
GrGetWindowInfo(GDK_DRAWABLE_XID(window), &winfo);
if (x)
*x = winfo.x;
if (y)
*y = winfo.y;
if (width)
*width = winfo.width;
if (height)
*height = winfo.height;
if (depth)
*depth = 24;
}
}
gint
gdk_window_get_origin (GdkWindow *window,
gint *x,
gint *y)
{
g_message("unimplemented %s", __FUNCTION__);
return 0;
}
gboolean
gdk_window_get_deskrelative_origin (GdkWindow *window,
gint *x,
gint *y)
{
g_message("unimplemented %s", __FUNCTION__);
return 0;
}
void
gdk_window_get_root_origin (GdkWindow *window,
gint *x,
gint *y)
{
g_message("unimplemented %s", __FUNCTION__);
}
GdkWindow*
gdk_window_get_pointer (GdkWindow *window,
gint *x,
gint *y,
GdkModifierType *mask)
{
g_message("unimplemented %s", __FUNCTION__);
return NULL;
}
GdkWindow*
gdk_window_at_pointer (gint *win_x,
gint *win_y)
{
g_message("unimplemented %s", __FUNCTION__);
return NULL;
}
GList*
gdk_window_get_children (GdkWindow *window)
{
g_message("unimplemented %s", __FUNCTION__);
return NULL;
}
GdkEventMask
gdk_window_get_events (GdkWindow *window)
{
return -1;
}
void
gdk_window_set_events (GdkWindow *window,
GdkEventMask event_mask)
{
GrSelectEvents(GDK_DRAWABLE_XID(window), -1);
}
void
gdk_window_shape_combine_mask (GdkWindow *window,
GdkBitmap *mask,
gint x, gint y)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_set_override_redirect (GdkWindow *window,
gboolean override_redirect)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_set_icon (GdkWindow *window,
GdkWindow *icon_window,
GdkPixmap *pixmap,
GdkBitmap *mask)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_set_icon_name (GdkWindow *window,
const gchar *name)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_set_group (GdkWindow *window,
GdkWindow *leader)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_set_decorations (GdkWindow *window,
GdkWMDecoration decorations)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_set_functions (GdkWindow *window,
GdkWMFunction functions)
{
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_set_child_shapes (GdkWindow *window)
{
g_return_if_fail (window != NULL);
g_return_if_fail (GDK_IS_WINDOW (window));
g_message("unimplemented %s", __FUNCTION__);
}
void
gdk_window_merge_child_shapes (GdkWindow *window)
{
g_return_if_fail (window != NULL);
g_return_if_fail (GDK_IS_WINDOW (window));
g_message("unimplemented %s", __FUNCTION__);
}
gboolean
gdk_window_set_static_gravities (GdkWindow *window,
gboolean use_static)
{
g_message("unimplemented %s", __FUNCTION__);
return 0;
}
void
_gdk_windowing_window_get_offsets (GdkWindow *window, gint *x_offset, gint *y_offset) {
*x_offset = *y_offset = 0;
}
gboolean
_gdk_windowing_window_queue_antiexpose (GdkWindow *window, GdkRegion *area) {
return FALSE;
}