Compare commits

...

6 Commits

Author SHA1 Message Date
Adrian Chadd
1f685e250a Revert "Merge pull request #34 from phillbush/localize-2"
This reverts commit b9e7c7313d, reversing
changes made to 774f98ef87.

It broke ToolItem input; will need to dig into this a bit more.
2026-02-28 12:16:16 -08:00
Adrian Chadd
b9e7c7313d Merge pull request #34 from phillbush/localize-2
Localize 2
2026-02-28 11:08:28 -08:00
Adrian Chadd
774f98ef87 Merge pull request #36 from phillbush/del-gnome
remove unused gnome.c
2026-02-28 11:07:10 -08:00
Lucas de Sena
e3f4248e8f remove unused gnome.c
The gnome.c file implemented the protocol used for early versions of
GNOME.  This protocol is deprecated, for it is already covered by the
more general EWMH standard (aka _NET properties) from freedesktop.org
(aka XDG).

In particular:
• Properties in gnome_setup() got deprecated by the _NET_SUPPORT{ED,ING_WM_CHECK}
  properties; already implemented in amiwm.
• Properties in gnome_managed_clients() got deprecated by the _NET_CLIENT_LIST
  property; not implemented in amiwm yet.
• Properties in gnome_multiple_desktops() got deprecated by the _NET_CURRENT_DESKTOP
  and _NET_NUMBER_OF_DESKTOPS properties; not implemented in amiwm yet.

Further EWMH support are be implemented in upcoming commits.

Also, this file was not even compiled and linked into amiwm anyway...
2026-02-24 18:54:52 +00:00
Lucas de Sena
599f0a17b3 localize menu routines
Keep state loal into drag_menu() in menu.c, rather than in global
variables around menu.c and main.c
2026-02-24 00:25:46 +00:00
Lucas de Sena
9354a98208 localize button click routines
Keep state local into click_*() for routines relating to button clicks
than in global variables around frame.c and main.c
2026-02-24 00:25:46 +00:00

184
gnome.c
View File

@@ -1,184 +0,0 @@
/* GNOME Window Manager Compliance support for amiwm
by Peter Bortas february 2000 */
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xproto.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>
extern void gnome_setup()
{
/* Section 1 - Detection of a GNOME compliant Window Manager
There is a single unambiguous way to detect if there currently is
a GNOME compliant Window Manager running. It is the job of the
Window Manager to set up a few things to make this
possible. Using the following method it is also possible for
applications to detect compliance by receiving an event when the
Window Manager exits.
To do this the Window Manager should create a Window, that is a
child of the root window. There is no need to map it, just create
it. The Window Manager may reuse ANY window it has for this
purpose - even if it is mapped, just as long as the window is
never destroyed while the Window Manager is running.
Once the Window is created the Window Manager should set a
property on the root window of the name _WIN_SUPPORTING_WM_CHECK,
and type CARDINAL. The atom's data would be a CARDINAL that is
the Window ID of the window that was created above. The window
that was created would ALSO have this property set on it with the
same values and type.*/
Display *disp;
Window root_window;
Atom atom_set;
CARD32 val;
Window win;
Atom list[10];
atom_set = XInternAtom(disp, "_WIN_SUPPORTING_WM_CHECK", False);
win = XCreateSimpleWindow(disp, root_window, -200, -200, 5, 5, 0, 0, 0);
val = win;
XChangeProperty(disp, root_window, atom_set, XA_CARDINAL, 32,
PropModeReplace, (unsigned char *)&val, 1);
XChangeProperty(disp, win, atom_set, XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)&val, 1);
/* Section 2 - Listing GNOME Window Manager Compliance
It is important to list which parts of GNOME Window Manager
compliance are supported. This is done fairly easily by doing the
following:
Create a property on the root window of the atom name
_WIN_PROTOCOLS. This property contains a list(array)of atoms that
are all the properties the Window Manager supports. These atoms
are any number of the following:
_WIN_LAYER
_WIN_STATE
_WIN_HINTS
_WIN_APP_STATE
_WIN_EXPANDED_SIZE
_WIN_ICONS
_WIN_WORKSPACE
_WIN_WORKSPACE_COUNT
_WIN_WORKSPACE_NAMES
_WIN_CLIENT_LIST
If you list one of these properties then you support it and
applications can expect information provided by, or accepted by
the Window Manager to work. */
atom_set = XInternAtom(disp, "_WIN_PROTOCOLS", False);
list[0] = XInternAtom(disp, "_WIN_LAYER", False);
list[1] = XInternAtom(disp, "_WIN_STATE", False);
list[2] = XInternAtom(disp, "_WIN_HINTS", False);
list[3] = XInternAtom(disp, "_WIN_APP_STATE", False);
list[4] = XInternAtom(disp, "_WIN_EXPANDED_SIZE", False);
list[5] = XInternAtom(disp, "_WIN_ICONS", False);
list[6] = XInternAtom(disp, "_WIN_WORKSPACE", False);
list[7] = XInternAtom(disp, "_WIN_WORKSPACE_COUNT", False);
list[8] = XInternAtom(disp, "_WIN_WORKSPACE_NAMES", False);
list[9] = XInternAtom(disp, "_WIN_CLIENT_LIST", False);
XChangeProperty(disp, root_window, atom_set, XA_ATOM, 32, PropModeReplace,
(unsigned char *)list, 10);
}
extern void gnome_managed_clients()
{
/* Section 3 - Providing Shortcuts Managed Clients
As an aide in having external applications be able to list and
access clients being managed by the Window Manager, a property
should be set on the root window of the name _WIN_CLIENT_LIST
which is an array of type CARDINAL. Each entry is the Window ID
of a managed client. If the list of managed clients changes,
clients are added or deleted, this list should be updated. */
Display *disp;
Window root_window;
Atom atom_set;
Window *wl;
int num;
fprintf(stderr, "FIXME: snome_managed_clients is a stub\n");
atom_set = XInternAtom(disp, "_WIN_CLIENT_LIST", False);
num = 0; /* FIXME: number of clients goes here */
wl = malloc(sizeof(Window) * num);
/* FIXME: Fill in array of window ID's */
XChangeProperty(disp, root_window, atom_set, XA_CARDINAL, 32,
PropModeReplace, (unsigned char *)wl, num);
if (wl)
free(wl);
}
extern void gnome_multiple_desktops()
{
/* Section 3 - Providing Multiple/Virtual Desktop Information.
If your Window Manager supports the concept of Multiple/Virtual
Desktops or Workspaces then you will definitely want to include
it. This involves your Window Manager setting several properties
on the root window.
First you should advertise how many Desktops your Window Manager
supports. This is done by setting a property on the root window
with the atom name _WIN_WORKSPACE_COUNT of type CARDINAL. The
properties data is a 32-bit integer that is the number of
Desktops your Window Manager currently supports. If you can add
and delete desktops while running, you may change this property
and its value whenever required. You should also set a property
of the atom _WIN_WORKSPACE of type CARDINAL that contains the
number of the currently active desktop (which is a number between
0 and the number advertised by _WIN_WORKSPACE_COUNT -
1). Whenever the active desktop changes, change this property.
Lastly you should set a property that is a list of strings called
_WIN_WORKSPACE_NAMES that contains names for the desktops (the
first string is the name of the first desktop, the second string
is the second desktop, etc.). This will allow applications toq
know what the name of the desktop is too, possibly to display it. */
Display *disp;
Window root_window;
Atom atom_set;
XTextProperty text;
int i, current_desk, number_of_desks;
char **names, s[1024];
CARD32 val;
/* FIXME: set current_desk, number_of_desks names */
atom_set = XInternAtom(disp, "_WIN_WORKSPACE", False);
val = (CARD32) current_desk;
XChangeProperty(disp, root_window, atom_set, XA_CARDINAL, 32,
PropModeReplace, (unsigned char *)&val, 1);
atom_set = XInternAtom(disp, "_WIN_WORKSPACE_COUNT", False);
val = (CARD32) number_of_desks;
XChangeProperty(disp, root_window, atom_set, XA_CARDINAL, 32,
PropModeReplace, (unsigned char *)&val, 1);
atom_set = XInternAtom(disp, "_WIN_WORKSPACE_NAMES", False);
names = malloc(sizeof(char *) * number_of_desks);
for (i = 0; i < number_of_desks; i++)
{
snprintf(s, sizeof(s), "Desktop %i", i);
names[i] = malloc(strlen(s) + 1);
strcpy(names[i], s);
}
if (XStringListToTextProperty(names, mode.numdesktops, ))
{
XSetTextProperty(disp, root_window, &val, atom_set);
XFree(text.value);
}
for (i = 0; i < number_of_desks; i++)
free(names[i]);
free(names);
}