Skip to content

awmaker/awmaker

Repository files navigation

                        awmaker - Abstracting Window Maker
                             A Window Maker Fork
                        Rodolfo García Peñas (kix) - 2014

This is a small project to break the Window Maker dependency with
the screen.

WHY?
====
Window Maker is a nice window manager, but is screen dependent. We cannot
run Window Maker without a screen, and this is a problem.

Probably you think that I am crazy, because Window Maker is a window manager,
so it needs a screen. Probably I am crazy, yes, I will try to show the idea.

When Window Maker creates an icon, a window, the Dock,... is not only setting
some variables, images,... is setting and *painting* them on the screen. All
items created in Window Maker are bind to the current screen. Now, if we
connect other screen to the computer, Window Maker is unable to unbind
them from the screen and paint the items to the new screen. Window Maker
needs to be restarted to start again with the new screen.

All items in Window Maker are created and mapped to the current screen.
You cannot see the items because they are hidden, and Window Maker only
show and hide them.

AND?
====
awmaker includes different steps. When an item is created, is not mapped
in the screen. Is only created. When the user needs the item, then is mapped
to the current screen. When the user finish with the item, the item is
unmapped (not destroyed, only unmapped).

For example. With Window Maker, menus are created (yes, the menu, buttons,
framewin, background,...) when Window Maker starts. When the user needs a
menu, Window Maker paint the menu on the screen. With awmaker, the menu is
created when Window Maker starts (awmaker is a fork of Window Maker ;-))
the items are created but they don't know nothing about the user screen.
When the user needs the menu, then awmaker set the screen options and paint
the menu. When the user finish, awmaker destroy all the screen related stuff.
If we attach a new screen, awmaker can paint the menu again in the new screen,
because the screen related stuff is created on live.

WINDOW MAKER AND awmaker
========================
awmaker is not Window Maker, is a fork. awmaker code comes from Window
Maker and many functions are the same. Low level functions, like
X11 code, file management,... are/will be the same, but in the future
many code will be different.

Patches for Window Maker probably could be included in awmaker without
changes, but other patches could need some tweaks. Don't work twice, if your
patch is common for Window Maker and awmaker, sent it to Window Maker, we
will include it in awmaker.

On the other hand, some bugs or problems could be solved in awmaker. Feel
free to include them in Window Maker.

awmaker is a different project created to include abstraction. Probably
in the future this ideas could be integrated in Window Maker. Window Maker
is a mature window manager and include this new ideas could break their
stability, for this reason, hold different projects is good for Window Maker.

Window Maker and awmaker share some things, like the libraries (WINGs, WUtil
and wraster) and the WPrefs application. awmaker should not include in the
future this libraries in their code, and use the libraries included in the
Window Maker development tree. WPrefs shouldn't be a problem, because the
look&feel should be the same between Window Maker and awmaker.

Please, read the README.WMAKER file for more info about Window Maker.

SOME THINGS
===========

1. awmaker is unstable. Don't use awmaker in production environments.
2. awmaker is under development. Is not a final product. Probably only
   a 20% of awmaker is done. Is a long way. We are playing.

NEXT STEPS
==========
The next steps are:

1. There are six main blocks (windows, icons, framewin, workspaces, main
   icons [Dock, Clip, Drawer] and menus). Include create, map and unmap
   functions for all of them. There are functions created for wcore, framewin
   and menus, this code could be improved, but is a way to understand the
   main idea for other blocks.
2. Break the icon screen dependency. When the icon is created, is created
   for the current screen. Probably the better way is read the file name and
   create the icon in the "_map" function.
3. Change the start up steps. The start up should create the workspaces and
   include the Clip, Dock, Drawers in the workspaces. Then load the screen
   and map the workspace in the screen/s.
4. Include shutdown steps. The shutdown step should unmap all the items
   (workspaces,...) without destroy the items.
5. Join steps 3 and 4. We can change the screen without restart awmaker.

CAN I PLAY?
===========
Yes! You are very welcome to help in the project. Fork it. We are in
https://github.com/awmaker/awmaker