2005-11-08 Matthew Allum <mallum@openedhand.com>

* Makefile:
        * Makefile.am:
        * autogen.sh:
        * configure.ac:
        * matchbox-window-manager-2.c:
        * mb-wm-atoms.c:
        * mb-wm-atoms.h:
        * mb-wm-client.c:
        * mb-wm-client.h:
        * mb-wm-core.c:
        * mb-wm-core.h:
        * mb-wm-keys.c:
        * mb-wm-keys.h:
        * mb-wm-layout.c:
        * mb-wm-layout.h:
        * mb-wm-props.c:
        * mb-wm-props.h:
        * mb-wm-stack.c:
        * mb-wm-stack.h:
        * mb-wm-types.h:
        * mb-wm-util.c:
        * mb-wm-util.h:
        * mb-wm.h:
        * src/Makefile.am:
        * src/core/Makefile.am:
        * src/core/mb-wm-client.c: (mb_wm_client_window_new),
        (mb_wm_client_new), (mb_wm_client_base_init):
        * src/core/mb-wm-client.h:
        * src/core/mb-wm-core.c: (test_map_request), (mb_wm_run):
        * src/core/mb-wm-types.h:
        * src/core/mb-wm-window.c:
        * src/core/mb-wm-window.h:
        * src/core/mb-wm.h:
        * src/matchbox-window-manager-2.c:
        (test_panel_client_request_geometry), (test_client_new):
        * xas.c:
        * xas.h:
        Autofooify. Split Window 'wrapper' code into its own file
        and rejig a little.
This commit is contained in:
Matthew Allum
2005-11-08 23:32:06 +00:00
parent 292d63415c
commit 7277a372ea
32 changed files with 385 additions and 65 deletions

0
AUTHORS Normal file
View File

View File

@@ -1,3 +1,45 @@
2005-11-08 Matthew Allum <mallum@openedhand.com>
* Makefile:
* Makefile.am:
* autogen.sh:
* configure.ac:
* matchbox-window-manager-2.c:
* mb-wm-atoms.c:
* mb-wm-atoms.h:
* mb-wm-client.c:
* mb-wm-client.h:
* mb-wm-core.c:
* mb-wm-core.h:
* mb-wm-keys.c:
* mb-wm-keys.h:
* mb-wm-layout.c:
* mb-wm-layout.h:
* mb-wm-props.c:
* mb-wm-props.h:
* mb-wm-stack.c:
* mb-wm-stack.h:
* mb-wm-types.h:
* mb-wm-util.c:
* mb-wm-util.h:
* mb-wm.h:
* src/Makefile.am:
* src/core/Makefile.am:
* src/core/mb-wm-client.c: (mb_wm_client_window_new),
(mb_wm_client_new), (mb_wm_client_base_init):
* src/core/mb-wm-client.h:
* src/core/mb-wm-core.c: (test_map_request), (mb_wm_run):
* src/core/mb-wm-types.h:
* src/core/mb-wm-window.c:
* src/core/mb-wm-window.h:
* src/core/mb-wm.h:
* src/matchbox-window-manager-2.c:
(test_panel_client_request_geometry), (test_client_new):
* xas.c:
* xas.h:
Autofooify. Split Window 'wrapper' code into its own file
and rejig a little.
2005-11-06 Matthew Allum <mallum@openedhand.com>
* Makefile:

View File

@@ -1,28 +0,0 @@
LIBS=`pkg-config --libs x11`
INCS=`pkg-config --cflags x11`
#LIBS=`pkg-config --libs xcb`
#INCS=`pkg-config --cflags xcb`
OBJS=mb-wm-core.o mb-wm-stack.o mb-wm-client.o mb-wm-util.o mb-wm-atoms.o \
mb-wm-props.c mb-wm-layout.c mb-wm-keys.c xas.c \
matchbox-window-manager-2.c
HEADERS=mb-wm.h mb-wm-client.h mb-wm-stack.h mb-wm-util.h mb-wm-types.h \
mb-wm-atoms.h mb-wm-types.h mb-wm-core.h xas.h mb-wm-layout.h \
mb-wm-keys.h
.c.o:
$(CC) -g -Wall $(CFLAGS) $(INCS) -c $*.c
matchbox-window-manager-2: $(OBJS)
$(CC) -g -Wall $(CFLAGS) -o $@ $(OBJS) $(LIBS)
$(OBJS): $(HEADERS)
clean:
rm -fr *.o matchbox-window-manager

8
Makefile.am Normal file
View File

@@ -0,0 +1,8 @@
SUBDIRS = src
# Extra clean files so that maintainer-clean removes *everything*
snapshot:
$(MAKE) dist distdir=$(PACKAGE)-snapshot-`date +"%Y%m%d"`
MAINTAINERCLEANFILES = aclocal.m4 compile config.guess config.sub configure depcomp install-sh ltmain.sh Makefile.in missing

0
NEWS Normal file
View File

3
autogen.sh Executable file
View File

@@ -0,0 +1,3 @@
#! /bin/sh
autoreconf -v --install || exit 1
./configure --enable-maintainer-mode "$@"

33
configure.ac Normal file
View File

@@ -0,0 +1,33 @@
AC_PREREQ(2.59)
AC_INIT([matchbox-window-manager-2], 0.0.0, [mallum@handhelds.org])
AC_CONFIG_SRCDIR([src/core/mb-wm-core.c])
AM_INIT_AUTOMAKE()
AM_MAINTAINER_MODE
AM_CONFIG_HEADER(config.h)
AC_PROG_CC
AM_PROG_LIBTOOL
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h string.h])
AC_C_CONST
AC_CHECK_FUNCS([memset strdup strncasecmp])
PKG_CHECK_MODULES(MBWM, x11,,
AC_MSG_ERROR([*** You need to install modern xlibs ***]))
MBWM_INCS='-I$(top_srcdir)/src/core -I$(top_srcdir)/src/'
MBWM_CORE_LIB='$(top_builddir)/src/core/libmatchbox-window-manager-2-core.a'
AC_SUBST([MBWM_CFLAGS])
AC_SUBST([MBWM_LIBS])
AC_SUBST([MBWM_CORE_LIB])
AC_SUBST([MBWM_INCS])
AC_OUTPUT([
Makefile
src/Makefile
src/core/Makefile
])

20
src/Makefile.am Normal file
View File

@@ -0,0 +1,20 @@
SUBDIRS = core
INCLUDES = \
@MBWM_INCS@ \
@MBWM_CFLAGS@
bin_PROGRAMS = matchbox-window-manager-2
matchbox_window_manager_2_SOURCES = \
matchbox-window-manager-2.c
matchbox_window_manager_2_LDADD = \
@MBWM_LIBS@ \
@MBWM_CORE_LIB@
matchbox_window_manager_2_DEPENDENCIES = \
@MBWM_CORE_LIB@
MAINTAINERCLEANFILES = config.h.in Makefile.in

33
src/core/Makefile.am Normal file
View File

@@ -0,0 +1,33 @@
noinst_LIBRARIES = libmatchbox-window-manager-2-core.a
core_h = mb-wm.h \
mb-wm-client.h \
mb-wm-window.h \
mb-wm-stack.h \
mb-wm-util.h \
mb-wm-types.h \
mb-wm-atoms.h \
mb-wm-core.h \
mb-wm-layout.h \
mb-wm-props.h \
mb-wm-keys.h \
xas.h
core_c = mb-wm-client.c \
mb-wm-window.c \
mb-wm-stack.c \
mb-wm-props.c \
mb-wm-util.c \
mb-wm-atoms.c \
mb-wm-core.c \
mb-wm-layout.c \
mb-wm-keys.c \
xas.c
libmatchbox_window_manager_2_core_a_SOURCES = $(core_h) $(core_c)
libmatchbox_window_manager_2_core_a_INCLUDES = @MBWM_INCS@ @MBWM_CFLAGS@
MAINTAINERCLEANFILES = config.h.in Makefile.in

View File

@@ -21,7 +21,7 @@ struct MBWindowManagerClientPriv
static void
mb_wm_client_base_init (MBWindowManager *wm,
MBWindowManagerClient *client,
MBWindowManagerClientWindow *win);
MBWMWindow *win);
static void
mb_wm_client_base_realize (MBWindowManagerClient *client);
@@ -72,10 +72,11 @@ mb_wm_client_visibility_mark_dirty (MBWindowManagerClient *client)
/* Window new */
MBWindowManagerClientWindow*
#if 0
MBWMWindow*
mb_wm_client_window_new (MBWindowManager *wm, Window xwin)
{
MBWindowManagerClientWindow *win = NULL;
MBWMWindow *win = NULL;
enum {
COOKIE_WIN_TYPE = 0,
@@ -176,10 +177,12 @@ mb_wm_client_window_new (MBWindowManager *wm, Window xwin)
return NULL;
}
#endif
/* base methods */
MBWindowManagerClient* /* FIXME: rename to mb_wm_client_base/class_new ? */
mb_wm_client_new (MBWindowManager *wm, MBWindowManagerClientWindow *win)
mb_wm_client_new (MBWindowManager *wm, MBWMWindow *win)
{
MBWindowManagerClient *client = NULL;
@@ -195,7 +198,7 @@ mb_wm_client_new (MBWindowManager *wm, MBWindowManagerClientWindow *win)
void
mb_wm_client_base_init (MBWindowManager *wm,
MBWindowManagerClient *client,
MBWindowManagerClientWindow *win)
MBWMWindow *win)
{
client->wmref = wm;
client->window = win;
@@ -222,7 +225,7 @@ mb_wm_client_base_init (MBWindowManager *wm,
void
mb_wm_client_init (MBWindowManager *wm,
MBWindowManagerClient *client,
MBWindowManagerClientWindow *win)
MBWMWindow *win)
{
if (client->init)
client->init(wm, client, win);

View File

@@ -84,11 +84,11 @@ MBWMClientReqGeomType;
/* Methods */
typedef void (*MBWMClientNewMethod) (MBWindowManager *wm,
MBWindowManagerClientWindow *win);
MBWMWindow *win);
typedef void (*MBWMClientInitMethod) (MBWindowManager *wm,
MBWindowManagerClient *client,
MBWindowManagerClientWindow *win);
MBWMWindow *win);
typedef void (*MBWMClientRealizeMethod) (MBWindowManagerClient *client);
@@ -108,16 +108,6 @@ typedef void (*MBWMClientHideMethod) (MBWindowManagerClient *client);
typedef void (*MBWMClientSyncMethod) (MBWindowManagerClient *client);
struct MBWindowManagerClientWindow
{
MBGeometry geometry;
unsigned int depth;
char *name;
Window xwindow;
Atom net_type;
};
struct MBWindowManagerClient
{
int type;
@@ -125,7 +115,7 @@ struct MBWindowManagerClient
MBWindowManager *wmref;
char *name;
MBWindowManagerClientWindow *window;
MBWMWindow *window;
Window xwin_frame;
unsigned long stacking_hints;
@@ -182,16 +172,16 @@ struct MBWindowManagerClient
MBWindowManagerClientWindow*
MBWMWindow*
mb_wm_client_window_new (MBWindowManager *wm, Window window);
MBWindowManagerClient*
mb_wm_client_new (MBWindowManager *wm, MBWindowManagerClientWindow *win);
mb_wm_client_new (MBWindowManager *wm, MBWMWindow *win);
void
mb_wm_client_init (MBWindowManager *wm,
MBWindowManagerClient *client,
MBWindowManagerClientWindow *win);
MBWMWindow *win);
void
mb_wm_client_realize (MBWindowManagerClient *client);

View File

@@ -85,7 +85,7 @@ test_map_request (MBWindowManager *wm,
if (!client)
{
MBWindowManagerClientWindow *win = NULL;
MBWMWindow *win = NULL;
if (wm->new_client_from_window_func == NULL)
{
@@ -223,10 +223,11 @@ mb_wm_run(MBWindowManager *wm)
XEvent xev;
XNextEvent(wm->xdpy, &xev);
MBWM_DBG("@ XEvent: '%s:%i' for %lx",
MBWM_DBG("@ XEvent: '%s:%i' for %lx %s",
MBWMDEBUGEvents[xev.type],
xev.type,
xev.xany.window
xev.xany.window,
xev.xany.window == wm->xwin_root ? "(root)" : ""
);
switch (xev.type)
@@ -262,26 +263,19 @@ mb_wm_run(MBWindowManager *wm)
xev_funcs->configure_request(wm,
(XConfigureRequestEvent*)&xev.xconfigurerequest,
xev_funcs->user_data);
break;
case KeyPress:
if (xev_funcs->key_press)
xev_funcs->key_press(wm,
(XKeyEvent*)&xev.xkey,
xev_funcs->user_data);
break;
default:
break;
}
if (wm->need_display_sync)
mb_wm_core_sync (wm);
}
}

View File

@@ -54,7 +54,7 @@ typedef struct MBWindowManagerPriv MBWindowManagerPriv;
typedef struct MBWindowManagerClient MBWindowManagerClient;
typedef struct MBWindowManagerClientPriv MBWindowManagerClientPriv;
typedef struct MBWindowManagerClientWindow MBWindowManagerClientWindow;
typedef struct MBWMWindow MBWMWindow;
typedef unsigned long MBWMCookie;
typedef int MBWindowManagerClientType;
@@ -184,7 +184,7 @@ struct MBWMKeyBinding
typedef MBWindowManagerClient* (*MBWindowManagerNewClientFunc)
(MBWindowManager *wm,
MBWindowManagerClientWindow *w);
MBWMWindow *w);
typedef void (*MBWindowManagerDestroyClientFunc)
(MBWindowManager *wm,

161
src/core/mb-wm-window.c Normal file
View File

@@ -0,0 +1,161 @@
#include "mb-wm.h"
enum {
COOKIE_WIN_TYPE = 0,
COOKIE_WIN_ATTR,
COOKIE_WIN_GEOM,
COOKIE_WIN_NAME,
COOKIE_WIN_NAME_UTF8,
COOKIE_WIN_SIZE_HINTS,
COOKIE_WIN_WMHINTS,
N_COOKIES
};
MBWMWindow*
mb_wm_client_window_new (MBWindowManager *wm, Window xwin)
{
MBWMWindow *win = NULL;
win = mb_wm_util_malloc0(sizeof(MBWMWindow));
if (!win)
return NULL; /* FIXME: Handle out of memory */
win->xwindow = xwin;
mb_wm_window_sync_properties (wm, win, MBWM_WINDOW_PROP_ALL);
return win;
}
Bool
mb_wm_window_sync_properties (MBWindowManager *wm,
MBWMWindow *win,
unsigned long props_req)
{
MBWMCookie cookies[N_COOKIES];
Atom actual_type_return, *result_atom = NULL;
int actual_format_return;
unsigned long nitems_return;
unsigned long bytes_after_return;
unsigned int foo;
int x_error_code;
Window xwin;
MBWMWindowAttributes *xwin_attr = NULL;
xwin = win->xwindow;
if (props_req & MBWM_WINDOW_PROP_WIN_TYPE)
cookies[COOKIE_WIN_TYPE]
= mb_wm_property_atom_req(wm, xwin,
wm->atoms[MBWM_ATOM_NET_WM_WINDOW_TYPE]);
if (props_req & MBWM_WINDOW_PROP_ATTR)
cookies[COOKIE_WIN_ATTR]
= mb_wm_xwin_get_attributes (wm, xwin);
if (props_req & MBWM_WINDOW_PROP_GEOMETRY)
cookies[COOKIE_WIN_GEOM]
= mb_wm_xwin_get_geometry (wm, (Drawable)xwin);
/*
if (props_req & MBWM_WINDOW_PROP_NAME)
{
cookies[COOKIE_WIN_NAME]
= mb_wm_property_req (wm,
xwin,
prop,
(wm)->atoms[MBWM_ATOM_WM_NAME],
1024L,
False,
XA_WM_NAME);
cookies[COOKIE_WIN_NAME_UTF8]
mb_wm_property_utf8_req(wm, xwin,
wm->atoms[MBWM_ATOM_NET_WM_NAME]);
}
if (props_req & MBWM_WINDOW_PROP_WMHINTS)
{
cookies[COOKIE_WIN_WMHINTS]
= mb_wm_property_req (wm,
xwin,
prop,
(wm)->atoms[MBWM_ATOM_WM_HINTS],
1024L,
False,
XA_WM_HINTS);
}
*/
XSync(wm->xdpy, False);
if (props_req & MBWM_WINDOW_PROP_WIN_TYPE)
{
mb_wm_property_reply (wm,
cookies[COOKIE_WIN_TYPE],
&actual_type_return,
&actual_format_return,
&nitems_return,
&bytes_after_return,
(unsigned char **)&result_atom,
&x_error_code);
if (x_error_code
|| actual_type_return != XA_ATOM
|| actual_format_return != 32
|| nitems_return != 1
|| result_atom == NULL)
{
MBWM_DBG("### Warning net type prop failed ###");
}
else
win->net_type = result_atom[0];
if (result_atom)
XFree(result_atom);
result_atom = NULL;
}
if (props_req & MBWM_WINDOW_PROP_ATTR)
{
xwin_attr = mb_wm_xwin_get_attributes_reply (wm,
cookies[COOKIE_WIN_ATTR],
&x_error_code);
if (!xwin_attr || x_error_code)
{
MBWM_DBG("### Warning Get Attr Failed ( %i ) ###", x_error_code);
goto abort;
}
if (!mb_wm_xwin_get_geometry_reply (wm,
cookies[COOKIE_WIN_GEOM],
&win->geometry,
&foo,
&win->depth,
&x_error_code))
{
MBWM_DBG("### Warning Get Geometry Failed ( %i ) ###", x_error_code);
MBWM_DBG("### Cookie ID was %li ###", cookies[COOKIE_WIN_GEOM]);
goto abort;
}
MBWM_DBG("@@@ New Window Obj @@@");
MBWM_DBG("Win: %lx", win->xwindow);
MBWM_DBG("Type: %lx",win->net_type);
MBWM_DBG("Geom: +%i+%i,%ix%i", win->geometry.x, win->geometry.y,
win->geometry.width, win->geometry.height);
}
abort:
if (xwin_attr)
XFree(xwin_attr);
return True;
}

60
src/core/mb-wm-window.h Normal file
View File

@@ -0,0 +1,60 @@
/*
* Matchbox Window Manager II - A lightweight window manager not for the
* desktop.
*
* Authored By Matthew Allum <mallum@o-hand.com>
*
* Copyright (c) 2005 OpenedHand Ltd - http://o-hand.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef _HAVE_MB_WM_WINDOW_H
#define _HAVE_MB_WM_WINDOW_H
#define MBWM_WINDOW_PROP_WIN_TYPE (1<<1)
#define MBWM_WINDOW_PROP_GEOMETRY (1<<2)
#define MBWM_WINDOW_PROP_ATTR (1<<3)
#define MBWM_WINDOW_PROP_NAME (1<<4)
#define MBWM_WINDOW_PROP_SIZE_HINTS (1<<5)
#define MBWM_WINDOW_PROP_ICON (1<<6)
#define MBWM_WINDOW_PROP_URGENCY (1<<7)
#define MBWM_WINDOW_PROP_GROUP (1<<8)
#define MBWM_WINDOW_PROP_PID (1<<9)
#define MBWM_WINDOW_PROP_PROTOS (1<<10)
#define MBWM_WINDOW_PROP_TRANSIENCY (1<<11)
#define MBWM_WINDOW_PROP_STATE (1<<12)
#define MBWM_WINDOW_PROP_NET_STATE (1<<13)
#define MBWM_WINDOW_PROP_STARTUP_ID (1<<14)
#define MBWM_WINDOW_PROP_ALL (0xffffffff)
struct MBWMWindow
{
MBGeometry geometry;
unsigned int depth;
char *name;
Window xwindow;
Atom net_type;
};
MBWMWindow*
mb_wm_client_window_new (MBWindowManager *wm, Window xwin);
Bool
mb_wm_window_sync_properties (MBWindowManager *wm,
MBWMWindow *win,
unsigned long props_req);
#endif

View File

@@ -66,6 +66,7 @@
#include "mb-wm-util.h"
#include "mb-wm-core.h"
#include "mb-wm-keys.h"
#include "mb-wm-window.h"
#include "mb-wm-client.h"
#include "mb-wm-layout.h"
#include "mb-wm-stack.h"

View File

@@ -49,7 +49,7 @@ test_panel_client_request_geometry (MBWindowManagerClient *client,
}
MBWindowManagerClient*
test_panel_client_new(MBWindowManager *wm, MBWindowManagerClientWindow *win)
test_panel_client_new(MBWindowManager *wm, MBWMWindow *win)
{
TestPanelClient *pc = NULL;
@@ -71,7 +71,7 @@ test_panel_client_new(MBWindowManager *wm, MBWindowManagerClientWindow *win)
MBWindowManagerClient*
test_client_new(MBWindowManager *wm, MBWindowManagerClientWindow *win)
test_client_new(MBWindowManager *wm, MBWMWindow *win)
{
TestClient *tc = NULL;
@@ -88,7 +88,7 @@ test_client_new(MBWindowManager *wm, MBWindowManagerClientWindow *win)
}
MBWindowManagerClient*
client_new(MBWindowManager *wm, MBWindowManagerClientWindow *win)
client_new(MBWindowManager *wm, MBWMWindow *win)
{
if (win->net_type == wm->atoms[MBWM_ATOM_NET_WM_WINDOW_TYPE_DOCK])
return test_panel_client_new(wm, win);