mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-11 11:20:12 +00:00
601 lines
12 KiB
C
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;
|
||
|
}
|