1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-19 12:28:22 +01:00
Commit Graph

2925 Commits

Author SHA1 Message Date
Iain Patterson
90675a6f04 Set StrictWindozeCycle by default.
Window Maker's behaviour changes when StrictWindozeCycle is active.  As
a rule we try not to set the default value of new options such that they
would change the behaviour expected by users.

In this case, however, the switchpanel was not working as intended.
Users who prefer the old method can set StrictWindozeCycle off with

  wdwrite WindowMaker StrictWindozeCycle NO
2013-05-02 20:41:07 +01:00
Iain Patterson
c9937f6f6a Fix StartWindozeCycle() shift key behaviour.
As the name implies, StartWindozeCycle() cycles windows in the same way
that a popular commercially-available operating system does.  However
Window Maker's handling of the shift key in the switchpanel does not
currently mirror that of its commercial counterpart.

In the popular operating system:

  Holding alt and shift then pressing and releasing tab will highlight
  the previous window in the switcher.

  Releasing shift with alt still held will not close the switcher.

  The window change is commited when alt is released.

In Window Maker:

  Holding alt and shift then pressing and releasing tab will highlight
  the previous window in the switchpanel.

  Releasing shift with alt still held will close the switchpanel and commit
  the window change.

This patch adds the StrictWindozeCycle boolean preference.  When it is
set to YES the switchpanel will remain open as long as alt is held even
if shift is pressed and released.
2013-05-02 20:41:07 +01:00
Rodolfo García Peñas (kix)
29a5267485 icon_update_pixmap default moved to bottom
The default case is moved to the bottom of the switch case.

The default case should be removed, because the icon has always
a right value, because the icon creation always uses a real value:

kix@debian:~/src/wmaker/wmaker-crm/src$ grep wAppIconCreateForDock *c
appicon.c:WAppIcon *wAppIconCreateForDock(WScreen *scr, char *command, char *wm_instance, char *wm_class, int tile)
dock.c:         btn = wAppIconCreateForDock(scr, NULL, "Logo", "WMClip", TILE_CLIP);
dock.c:         btn = wAppIconCreateForDock(scr, NULL, "Logo", "WMDock", TILE_NORMAL);
dock.c:         btn = wAppIconCreateForDock(scr, NULL, name, "WMDrawer", TILE_DRAWER);
dock.c: aicon = wAppIconCreateForDock(scr, command, winstance, wclass, TILE_NORMAL);
(1)dock.c:                         aicon = wAppIconCreateForDock(dock->screen_ptr, NULL,
kix@debian:~/src/wmaker/wmaker-crm/src$
kix@debian:~/src/wmaker/wmaker-crm/src$ grep TILE_ *c | grep -v ICON_TILE_SIZE
***[2]appicon.c:              tile = TILE_CLIP;
dock.c:         btn = wAppIconCreateForDock(scr, NULL, "Logo", "WMClip", TILE_CLIP);
dock.c:         btn = wAppIconCreateForDock(scr, NULL, "Logo", "WMDock", TILE_NORMAL);
dock.c:         btn = wAppIconCreateForDock(scr, NULL, name, "WMDrawer", TILE_DRAWER);
dock.c: aicon = wAppIconCreateForDock(scr, command, winstance, wclass, TILE_NORMAL);
(2)dock.c:                                                       wm_instance, wm_class, TILE_NORMAL);
***[3]icon.c: icon->tile_type = TILE_NORMAL;
icon.c: case TILE_NORMAL:
icon.c: case TILE_CLIP:
icon.c: case TILE_DRAWER:
kix@debian:~/src/wmaker/wmaker-crm/src$ grep tile_type *c
icon.c: icon->tile_type = TILE_NORMAL;
***[1]icon.c: icon->tile_type = tile;
icon.c: switch (icon->tile_type) {
icon.c:         wwarning("Unknown tile type: %d.\n", icon->tile_type);
kix@debian:~/src/wmaker/wmaker-crm/src$

There are only three cases without value (asterisk in the line start) set
as preprocessor variable. (1) and (2) is the same call. These are the three cases:

Case [1]:

-------------8<--------------
WIcon *icon_create_for_dock(WScreen *scr, char *command, char *wm_instance, char *wm_class, int tile)
{
        WIcon *icon;

        icon = icon_create_core(scr, 0, 0);
        icon->tile_type = tile;
-------------8<--------------

Calls to icon_create_for_dock, is only call in appicon.c:

-------------8<--------------
kix@debian:~/src/wmaker/wmaker-crm/src$ grep icon_create_for_dock *c
appicon.c:      aicon->icon = icon_create_for_dock(scr, command, wm_instance, wm_class, tile);
icon.c:WIcon *icon_create_for_dock(WScreen *scr, char *command, char *wm_instance, char *wm_class, int tile)
kix@debian:~/src/wmaker/wmaker-crm/src$
-------------8<--------------

The call:

-------------8<--------------
WAppIcon *wAppIconCreateForDock(WScreen *scr, char *command, char *wm_instance, char *wm_class, int tile)
{
[snip]
        if (strcmp(wm_class, "WMDock") == 0 && wPreferences.flags.clip_merged_in_dock)
                tile = TILE_CLIP;
        aicon->icon = icon_create_for_dock(scr, command, wm_instance, wm_class, tile);
-------------8<--------------

And the calls to wAppIconCreateForDock() are checked before.

The case [2] is just the line:

-------------8<--------------
WAppIcon *wAppIconCreateForDock(WScreen *scr, char *command, char *wm_instance, char *wm_class, int tile)
{
[snip]
        if (strcmp(wm_class, "WMDock") == 0 && wPreferences.flags.clip_merged_in_dock)
***             tile = TILE_CLIP;
        aicon->icon = icon_create_for_dock(scr, command, wm_instance, wm_class, tile);
-------------8<--------------

Then, is sure too.

The case [3] is:

-------------8<--------------
WIcon *icon_create_for_wwindow(WWindow *wwin)
{
[snip]
        icon->tile_type = TILE_NORMAL;
-------------8<--------------

All windows have TILE_NORMAL.

Then, all cases are secure.
2013-04-17 10:23:10 +01:00
Rodolfo García Peñas (kix)
41da1b30db New file misc.h
This is the new file misc.h, with the function prototypes for misc.c.
This file is created using misc.c and removing the prototypes from funcs.h
2013-04-17 10:13:25 +01:00
Iain Patterson
25b5ca2566 Compiler food.
WMMergePLDictionaries() and WMSubtractPLDictionaries() are declared to
return WMPropList * but are set to call the wassertr macro when their
arguments do not pass a sanity check.  The wassertr macro eventually
calls return with no return value, triggering a compiler warning if
-Wreturn-type is used.

Change wassertr to wassertrv and force a return of NULL in the error
case.
2013-04-16 00:47:10 +01:00
Renan Traba
729886ef52 WPrefs: fix missing drawer image in Makefile.am 2013-04-12 09:54:58 +01:00
Carlos R. Mafra
f863dafef1 WPrefs: Avoid crash when config file does not contain wmdrawer settings
When first using the wmdrawer panel of WPrefs the settings

ClipAutoexpandDelay
ClipAutocollapseDelay
ClipAutoraiseDelay
ClipAutolowerDelay

are not yet saved in the user's config file and 'value' ends up
being undefined in showData() leading to a crash in adjustButtonSelectionBasedOnValue().

This patch is a workaround to make it possible to choose the config values for the
first time using WPrefs.
2013-04-12 02:52:41 +01:00
Carlos R. Mafra
311255a646 Fix compilation from merge conflict 2013-04-12 02:20:54 +01:00
Carlos R. Mafra
529ee0bd21 Merge branch 'wmdrawer' into next 2013-04-12 02:14:41 +01:00
Daniel Déchelotte
878a57d7b2 Add option to merge the workspace-switching functionality into the dock
The dock will have the up-right and down-left arrows to change workspaces and
the clip will be disabled. That is, if option ClipMergedInDock is set to yes in
GNUstep/Defaults/WindowMaker.
[not thoroughly tested]
2013-04-12 02:14:10 +01:00
Daniel Déchelotte
36bed6a77e Wrap appicons when dock is moved up and down
Add WrapAppiconsInDock option to control that behaviour (default: YES)
2013-04-12 02:14:10 +01:00
Daniel Déchelotte
3c628d50d2 Allow appicons above the dock
Previous, even the "anchor tile" of the dock could be moved down, it was
not possible to dock anything above it.
2013-04-12 02:14:10 +01:00
Daniel Déchelotte
5e004d5f11 Real-time dock left-right swapping
No more ghost dock when switching sides: the real swap happens
immediately, you can still adjust vertically afterwards. Removed two
functions in superfluous that are no longer used
2013-04-12 02:14:10 +01:00
Daniel Déchelotte
cf5fdca63d WPrefs: adds possibility to disable drawers from Docks panel 2013-04-12 02:14:10 +01:00
Daniel Déchelotte
e14e6b3da8 Add drawers to wmaker!
Drawers are horizontal docks, and they can themselves only live in the dock

To use them, right click on the dock or a docked appicon and select "Add
a drawer". Then move appicons into the drawer (drag them with the
mouse). You may change the icon of the drawer. By default, drawers
auto-expand and -collapse, and auto-raise/lower. This can be customized
in the same way as for the clip.

Set DisableDrawers to YES in G/D/WindowMaker if you do not want to see
the menu entry to add a drawer.

Just discovered this bug: the auto-attract icon functionality will not
work (to be precise, it crashes WM!) if the clip is disabled
(NoClip=YES). Will fix shortly, of course.
2013-04-12 02:14:10 +01:00
Daniel Déchelotte
707ce34a5e Added a SlideWindows function to handle horizontally-aligned array of windows
The existing SlideWindow() function is changed to call SlideWindows() with an array of 1 window
2013-04-12 02:14:10 +01:00
Daniel Déchelotte
95a73e2783 Added wDefaultPurgeInfo to remove what we stored about a given instance-class couple.
This function is not used for now, but will be for drawers
2013-04-12 02:14:10 +01:00
Daniel Déchelotte
9fae35fbc4 Merging appicon.c:appIconMouseDown and dock.c:handleIconMove into appicon.c:wHandleAppIconMove
Behaves essentially the same, only a bit more consistently.
Known differences:
1. An AppIcon will now always end up undocked if moved while Mod1 is pressed.
2. Moving a docked AppIcon with Mod1 pressed (undocking it) used to auto-expand the clip,
   as clip expansion happened first, while looking for a snapping position,
   and the test on Mod1 being pressed happened only later
2013-04-12 02:14:10 +01:00
Daniel Déchelotte
8b6ff01d39 Move code that removes icons from a dock to new removeIcons function
Code taken from removeIconsCallback.
2013-04-12 02:14:10 +01:00
Daniel Déchelotte
f93f847b33 Bring back some "About" information when double-clicking the dock
When dock is double-clicked and no application is defined to be launched, show
the information panel (instead of doing nothing).
2013-04-12 02:14:10 +01:00
Daniel Déchelotte
525ab89d01 Increase MAX_WINDOWLIST_WIDTH from 160 to 400 (in pixels) 2013-04-12 02:14:10 +01:00
Daniel Déchelotte
5a6e1653ac WPrefs: new Docks pannel, to change auto-expand/collapse/etc delays 2013-04-12 02:14:10 +01:00
Daniel Déchelotte
d24cbc79ee Make the clip's auto-delays configurable
The options are ClipAutoraiseDelay, ClipAutolowerDelay, ClipAutoexpandDelay, ClipAutocollapseDelay

The default values are weird but merely represent the previously
hard-coded ones. They are repeated in Defaults/WindowMaker to avoid a
WPrefs crash (but it's a good idea to make them "visible", too)

WPrefs change coming up
2013-04-12 02:14:10 +01:00
Daniel Déchelotte
6f44be87fc Consolidated all code checking whether a tile is fully on screen in one static function
The function existed before, but had all kinds of unneeded arguments and wasn't called everywhere.
2013-04-12 02:14:09 +01:00
Daniel Déchelotte
4b44020488 WPrefs: consolidate the 2 createImages static functions into a global one 2013-04-12 02:14:09 +01:00
Daniel Déchelotte
9548c42b71 Fix leading spaces in comment (trivial) 2013-04-12 02:14:09 +01:00
Daniel Déchelotte
cc02023e3e BF for "some obscured windows briefly appears when switching workspaces"
When changing workspace, mapped windows are unmapped from top to bottom
(referring to their stacking order), causing mapped but obscured windows
to briefly appear when the obscuring window is unmapped and until they
are themselves unmapped. [This might not be visible on recent hardware].
The fix is to unmap windows in reverse stacking order when changing
workspace.
2013-04-12 02:14:09 +01:00
Daniel Déchelotte
be95172c95 Avoid clip flickering when docking an appicon
In handleIconMove, when moving an appicon near the clip, all clips were
systematically shown each time the mouse moved, causing some flickering
(perhaps only perceptible on a low-end machine?). This patch introduces
a showed_all_clips boolean to expand clips only once.
2013-04-12 02:14:09 +01:00
Daniel Déchelotte
dfe7e255b2 Deleted useless test
If btn->omnipresent, then btn->dock is precisely
scr->workspaces[scr->current_workspace]->clip (cf.
wWorkspaceForceChange() calling wClipUpdateForWorkspaceChange())
2013-04-12 02:14:09 +01:00
Christophe CURIS
46c8d6d2bf configure: Add detection of library kvm that is used under OpenBSD
As proposed by Christian Schulte, when compiling WindowMaker on BSD
it uses the kvm library to gather information on processes (in the
os-dependant file), so we must properly link against the corresponding
library, which this patch adds.
2013-04-09 09:03:58 +01:00
Rodolfo García Peñas (kix)
6aa43d356c wIconChangeTitle rewritten
The function wIconChangeTitle() now changes the icon title name
doing the full work (except painting it).

The function receives now the icon to change the name and the
wwindow with the new name. The function checks if icon and the
window exists.

Then, try to get the name using wNETWMGetIconName(), if not found
then try to read it from wGetIconName(). Then the icon has the new
name and the function returns.

This is better because:

1. We don't need a flag to know if the window got the name
   using the wNETWMGetIconName function. Now call this function
   always.

2. We do the same work in all calls to the wIconChangeTitle()
   function.

The functions that uses wIconChangeTitle (at client.c, icon.c and
wmspec.c) uses always the value set by wNETWMGetIconName() first,
else, the value set by wGetIconName(). This is the reason for the
flag net_has_icon_title. Now the flag can be removed.
2013-04-09 08:30:54 +01:00
Rodolfo García Peñas (kix)
fa27215fcc wIconPaint: avoid crashing if icon is NULL
This patch checks that the icon exists before painting it.
2013-04-09 08:30:45 +01:00
Rodolfo García Peñas (kix)
8cb744739c Remove wIconUpdate in tileObserver
The call to wIconUpdate() can be changed by call to update_icon_pixmap(),
because the icon doesn't need to be changed.

Now, the icon pixmap is updated faster.

This change is more difficult to see, this is the explanation:

1. wIconUpdate() updates the icon for the applications, then call
   update_icon_pixmap() to re-create the pixmap.
2. tileObserver() is used if the event WNIconTileSettingsChanged() is
   launched. This event is used in the Notification for docks and wwindows:

WMAddNotificationObserver(tileObserver, icon, WNIconTileSettingsChanged, icon);

3. The function WNIconTileSettingsChanged() is used if the icon need refresh,
   used in the wReadDefaults() function. See code below. This function is used
   in the wmaker startup.

   if (needs_refresh & REFRESH_ICON_TILE)
     WMPostNotificationName(WNIconTileSettingsChanged, NULL, NULL);

4. Finally, the flag to refresh the icon tile is throw by setIconTile():

   return (reset ? REFRESH_ICON_TILE : 0);

   And this function only changes the the icon tile if reset is "1", that
   happend if src->icon_tile:

        if (scr->icon_tile) {
          reset = 1;
          RReleaseImage(scr->icon_tile);
          XFreePixmap(dpy, scr->icon_tile_pixmap);
        }

5. Then, we can drop the function wIconUpdate(), because the change is in the
   icon_tile variable, used only in icon_update_pixmap(). This function is
   only used in update_icon_pixmap() (not in wIconUpdate):

kix@kentin:~/src/wmaker/git/wmaker-crm/src$ grep icon_tile icon.c
                tile = RCloneImage(scr->icon_tile);
        XSetWindowBackgroundPixmap(dpy, icon->core->window, scr->icon_tile_pixmap);
kix@kentin:~/src/wmaker/git/wmaker-crm/src$

static void icon_update_pixmap(WIcon *icon, RImage *image)
{
[snip]
  if (icon->tile_type == TILE_NORMAL) {
    tile = RCloneImage(scr->icon_tile);
  } else {
    assert(scr->clip_tile);
    tile = RCloneImage(scr->clip_tile);
  }
[snip]

The XSetWindowBackgroundPixmap() call doesn't matter here.
2013-04-08 22:06:27 +01:00
Rodolfo García Peñas (kix)
dee9c457cf Remove wIconUpdate in wDockAttachIcon
The call to wIconUpdate() can be changed by call to update_icon_pixmap(),
because the icon doesn't need to be changed. This update is only for change
the icon pixmap to un-shadowed.

Now, the icon pixmap is updated faster.
2013-04-08 22:06:27 +01:00
Rodolfo García Peñas (kix)
3d0ed99043 Remove wIconUpdate in wDockDetach
The call to wIconUpdate() can be changed by call to update_icon_pixmap(),
because the icon doesn't need to be changed. This update is only for change
the icon pixmap to un-shadowed.

Now, the icon pixmap is updated faster.
2013-04-08 22:06:27 +01:00
Rodolfo García Peñas (kix)
88d16d03b9 Remove wIconUpdate in moveIconBetweenDocks
The call to wIconUpdate() can be changed by call to update_icon_pixmap(),
because the icon doesn't need to be changed. This update is only for change
the icon pixmap to shadowed.

Now, the icon pixmap is updated faster.
2013-04-08 22:06:27 +01:00
Rodolfo García Peñas (kix)
256c8a498e Remove wIconUpdate in keepIconsCallback
The call to wIconUpdate() can be changed by call to update_icon_pixmap(),
because the icon doesn't need to be changed. This update is only for change
the icon pixmap to shadowed.

Now, the icon pixmap is updated faster.
2013-04-08 22:06:26 +01:00
Rodolfo García Peñas (kix)
544bc8e7a7 Move out wIconUpdate from set_icon_image_from_database
The function set_icon_image_from_database() set the icon from the
database, but wIconUpdate() update the icon using different methods
, like for example get the image from X11. So, is better move the
wIconUpdate() to the function who call set_icon_image_from_database(),
to avoid understanding problems.
2013-04-08 22:06:26 +01:00
Rodolfo García Peñas (kix)
883ed8ac9a wIconChangeTitle rewrited
The function wIconChangeTitle() function calls wIconUpdate() or
wIconPaint() depending of changed. In both cases the icon->file_image
doesn't change, only the icon title, so we can use the same image
and we don't need update it. Because the variable changed is removed,
we can use wIconPaint() here.

Then the variable changed is not used, and these lines can be removed.
2013-04-08 22:06:26 +01:00
Rodolfo García Peñas (kix)
ca86f5594d New function update_icon_title
The function update_icon_title() updates the icon title.

The code comes from the function wIconPaint().
2013-04-08 22:06:26 +01:00
Rodolfo García Peñas (kix)
2c0a449f00 drawIconTitle renamed
The function drawIconTitle() only draw the icon title square, without
the title. The title must be set later, because yet is not initialized,
so is NULL.

Then, the right function name should be drawIconTitleBackground.

This patch also removes the variable titled.
2013-04-08 22:06:26 +01:00
Rodolfo García Peñas (kix)
b3ca57674d Dockapps don't have title
The dockapps don't have title, so this code must be removed.
The title height is 0 then and the variable title_height can
be removed.
2013-04-08 22:06:26 +01:00
Rodolfo García Peñas (kix)
4093d24625 wIconUpdate removed image argument
The argument image is not used in any call, so can be removed.
2013-04-08 22:06:26 +01:00
Rodolfo García Peñas (kix)
c24499f6ad wIconChangeImageFile use set_icon_image_from_image
The function wIconChangeImageFile() now use set_icon_image_from_image()
then:

1. Don't need call unset_icon_image() because the memory is free in the
   function set_icon_image_from_image().
2. After update the icon info, it must set the file name.
3. The pixmap image could be updated.
2013-04-08 22:06:26 +01:00
Rodolfo García Peñas (kix)
c088aba057 New function set_icon_image_from_image
The new function set_icon_image_from_image() sets the icon image using
a image provided as argument.

This function will be used to avoid call wIconUpdate() with the image
argument, doing the code easier and faster.

This patch calls unset_icon_image(), to free the icon image, to avoid
lost memory. After this patch, in winspector.c, the wIconUpdate() call
don't free the memory before update it.
2013-04-08 22:06:26 +01:00
Rodolfo García Peñas (kix)
389a0a252c New file placement.h
The file placement.h hold the definitions for placement.c
2013-04-03 19:33:34 +01:00
Rodolfo García Peñas (kix)
6fe23037ef wGetRectForHead moved to where used
The definition and call for wGetRectForHead is moved inside the
if block where is used. This code adds a WScreen pointer to make
the line shorter.

If menu->frame is NULL, then was NULL before this patch, so this
code doesn't include an error about this.

This patch will used with next patch to move the code inside the
block to an specific function.
2013-04-03 19:33:34 +01:00
Rodolfo García Peñas (kix)
b9e8bbbdc7 code clean at startup.c
Small code clean at startup.c
2013-04-03 19:33:34 +01:00
Rodolfo García Peñas (kix)
052efedd93 Removed dup function wScreenSearchForRootWindow
The function wScreenSearchForRootWindow is exactly like wScreenForRootWindow
so can be removed swapping the function call.
2013-04-03 19:20:10 +01:00
Iain Patterson
a401dcbdf6 Document new workspace shortcuts.
Describe the LastWorkspaceKey and MoveToWorkspace*Key shortcuts in the
NEWS file.
2013-03-28 19:09:17 +00:00