From e2607f616d8ab2abd494af74f0a53de7c658110f Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 18 Jan 2003 05:58:56 +0000 Subject: [PATCH] add DESIGN from the openbox3 repository. add to that the render.dia, a design diagram for the new render code --- DESIGN/ob3arch.png | Bin 0 -> 42783 bytes DESIGN/render.dia | Bin 0 -> 3246 bytes DESIGN/roadmap | 0 DESIGN/thoughts | 129 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+) create mode 100644 DESIGN/ob3arch.png create mode 100644 DESIGN/render.dia create mode 100644 DESIGN/roadmap create mode 100644 DESIGN/thoughts diff --git a/DESIGN/ob3arch.png b/DESIGN/ob3arch.png new file mode 100644 index 0000000000000000000000000000000000000000..31c76c94e38288a2a6021cd21d64aad1014f9665 GIT binary patch literal 42783 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 BdcFVv literal 0 HcmV?d00001 diff --git a/DESIGN/render.dia b/DESIGN/render.dia new file mode 100644 index 0000000000000000000000000000000000000000..938e41220ebabef1a842a76df33e8b3cbfce738e GIT binary patch literal 3246 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 literal 0 HcmV?d00001 diff --git a/DESIGN/roadmap b/DESIGN/roadmap new file mode 100644 index 00000000..e69de29b diff --git a/DESIGN/thoughts b/DESIGN/thoughts new file mode 100644 index 00000000..b7de0ad0 --- /dev/null +++ b/DESIGN/thoughts @@ -0,0 +1,129 @@ +goals: +openbox3 is supposed to be a wm shell, in that it offers a window management + core, and you are able to make it look however you want by writing theme + engines. + +versioning: +im kinda thinking of openbox3 as being a product on its own, and then future +additions to it going as 3.x, instead of the crazy fast number system we've +adhered to so far. openbox4 would be an entirely new product as well. Maybe not +to the extent that 3 will be, but significantly different. If we ever even got +to that point, 3.x could live forever! :) + +source heirarchy: +openbox3/ + rules/ architechture/platform specific Makefile rules + po/ translations into every language known to man, even klingon! + libob3/ classes which wrap obtool functionality, this is our toolkit (builds a separate .la) + src/ the window manager + util/ utility classes/functions (Rect, itostring, etc) + engines/ abstract interface and common code for the engines + simple/ initial testbed. renders a simple hardcoded decroation style + blackbox/ renders blackbox themes (bsetroot/bsetbg in here? no. fuck that) + gl/ renders insane gl themes + pixmap/ renders some sort of pixmap themes. a less generic name might + be nice. (?) + sawfish/ renders sawfish themes (?) + gfxcore/ base gfx stuff for all to use (BColor, etc) + gl/ code for drawing gl stuff + pixmap/ code for drawing pixmaps + +coding practices: + braces for if's/etc's shall go like this: + if () { + } + but, braces for funtions/classes/structs shall go like this: + class foo + { + } + and + void func() + { + } + thou shalt not 'cvs commit' without reading your 'cvs diff' first + indentation: 2 spaces (NO TABS). just like the ob2 format. + use const everywhere. pass pointer variables to functions as const. + we will be using doxygen to build documentation for the source code. *every* + function must have a doxygen comment for it. + +misc: + the libob external header(s) and the engine interface header need to be + installed to the system include/ dir + make sure that obtools can render things with the current engine! + im going to write our own configure script! see if that works out. It will use + the rules directory to support all these fun platforms. + use GNU gettext for translation/nls support. See: + http://www.gnu.org/manual/gettext/html_chapter/gettext_10.html#SEC141 + for its config, it will use $prefix/share/openbox/rc3 and ~/.openbox/rc3 + unsigned is the DEVIL. we will use signed variables EVERYWHERE. Xlib + unsigned's should be converted to a signed long. If int isn't big enough + for your data, than use a long. + +src: + everything will be event based. When you tell ob3 to add a workspace, it will + simply send the client message the same way an external app does. This way + there is only 1 code path for any process, not one for internally and one + for externally generated actions. + fuck workspace classes. all windows will exist in a screen list, and any per- + workspace processing can be done by checking each window's workspace() + value. + in each screen, have a list of the windows on the currently visible workspace. + This is updated when the workspace changes, or when windows are moved + between workspaces. + do we provide a callback interface from the plugins for when they catch mouse + input on the decorations? we should make some way to make mouse input std + across engines + dockapp support as good as wmaker + click-drag menus like wmaker/pwm/etc + allow for 'session management' of a sort. let the wm remember a window's + position/size/other attributes if they are saved by the user (window menu + or something). this is especially important for dockapps to be cool + on shutdown, first try to close each window with a normal close message. there + should be a timeout for this, and then kill it hard after the timeout/with a + dialog/whatever. This should be a separate option from normal exit, and + it should not do this from catching a signal. + for FocusIn/Out and Enter/LeaveNotify events, dont act on them immediately. + Rather, save which window's focused/entered until the queue is empty, then + if the focused/entered window has changed, act on it. This will be mad fast. + Do the same for changing workspaces. + keybindings. inside. final. god damn. i dont need 2 copies of the window + manager running, one just grabbing keys. + mouse gestures! + resizing modes (support one of these) + old style like now but without the server grab + old style like now but creating windows which show the bars so no grab is + needed + opaque mode + opaque mode where the frame resizes, and the client is resized aferwards (i + dont like this) + menus should have a most-recently or most-frequently chosen items section. + +engines: + each engine builds as a separate .so library. they are opened by the src/ and + libob/ code. + engines will be passed any number of screens, and must deal with them all with + a single instance. + engines must get events for most everything so they can be cool + you can run a different engine on each screen (most people wont want GL on + their second screen without accel!) + engines are responsible for creating all of the appropriate decor windows + engines must tell the wm how big the decorations are at all times and keep it + updated for things like gravity. + all engines will have to inherit from an abstract interface defined in the + engines/ dir. there will be 2 abstact interfaces. the "lower power" mode, + and the "full power mode". The engines must each inherit from both + interfaces for the window manager and obtools to work. + normally, an engine would setup the root window, window borders, timers, etc + for everything involved in decorating windows. But also, it needs to be able + to run in a slimmed mode that mostly consists of paintSurface() (the same + way the menus are painted probably!). This would then be used by client + apps like obtoolbar. These 2 modes are the "low power" and "full power" + interfaces described above. + +tool engine: + FillSurface + DrawBitmap (button pictures, such as X) + +main engine: + DecorateWindow + etc :) -- 2.39.2