The usual way to define a macro in is to name macro with 'USE_xxx' when
they are used to enable a feature 'xxx'.

As the feature concerns the Dock and not DnD in general (WINGs support is
not disabled), make it a bit more clear in the macro name and document the
configure flag in the Installation Manual.

Took opportunity to compile the corresponding file only when the feature is
not disabled.

Signed-off-by: Christophe CURIS <[email protected]>
---
 configure.ac               |  7 ++++---
 doc/build/Compilation.texi |  5 +++++
 src/Makefile.am            |  4 +++-
 src/appicon.c              |  8 ++++----
 src/appicon.h              |  2 +-
 src/dialog.c               |  2 +-
 src/dock.c                 | 30 +++++++++++++++---------------
 src/dock.h                 |  2 +-
 src/dockedapp.c            |  8 ++++----
 src/event.c                |  8 ++++----
 src/misc.c                 |  4 ++--
 src/screen.h               |  2 +-
 src/startup.c              |  4 ++--
 src/xdnd.c                 | 14 +++++++-------
 14 files changed, 54 insertions(+), 46 deletions(-)

diff --git a/configure.ac b/configure.ac
index 4e55a94..6a02376 100644
--- a/configure.ac
+++ b/configure.ac
@@ -502,15 +502,16 @@ AS_IF([test "x$enable_modelock" = "xyes"],
 dnl XDND Drag-nd-Drop support
 dnl =========================
 AC_ARG_ENABLE([xdnd],
-    [AS_HELP_STRING([--disable-xdnd], [disable Drag-nd-Drop support])],
+    [AS_HELP_STRING([--disable-xdnd], [disable support for Drag-and-Drop on 
the dock @<:@default=enabled@:>@])],
     [AS_CASE(["$enableval"],
         [yes|no], [],
         [AC_MSG_ERROR([bad value $enableval for --disable-xdnd]) ]) ],
     [enable_xdnd=yes])
 AS_IF([test "x$enable_xdnd" = "xyes"],
-    [supported_xext="$supported_xext XDnD"
-     AC_DEFINE([XDND], [1], [whether Drag-nd-Drop support should be enabled])],
+    [supported_core="$supported_core XDnD"
+     AC_DEFINE([USE_DOCK_XDND], [1], [whether Drag-and-Drop on the dock should 
be enabled])],
     [unsupported="$unsupported XDnd"])
+AM_CONDITIONAL([USE_DOCK_XDND], [test "x$enable_dock_xdnd" != "xno"])
 
 
 dnl XShape support
diff --git a/doc/build/Compilation.texi b/doc/build/Compilation.texi
index bffad76..cb19a6d 100644
--- a/doc/build/Compilation.texi
+++ b/doc/build/Compilation.texi
@@ -571,6 +571,11 @@ Disable support for Motif's MWM Window Manager hints.
 These attributes were introduced by the Motif toolkit to ask for special 
window appearance requests.
 Nowadays this is covered by the NetWM/EWMH specification, but there are still 
applications that rely on MWM Hints.
 
+@item --disable-xdnd
+Disable support for dragging and dropping files on the dock, which launches a 
user-specified command
+with that file.
+Starting from version 0.65.6 this feature is enabled by default.
+
 @item --enable-ld-version-script
 This feature is auto-detected, and you should not use this option.
 When compiling a library (@file{wrlib}, ...), @emph{gcc} has the possibility 
to filter the list of
diff --git a/src/Makefile.am b/src/Makefile.am
index 56ebe08..7fe9db7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -84,7 +84,6 @@ wmaker_SOURCES =      \
        usermenu.c \
        usermenu.h \
        xdnd.h \
-       xdnd.c \
        xinerama.h \
        xinerama.c \
        xmodifier.h \
@@ -108,6 +107,9 @@ wmaker_SOURCES =    \
        wsmap.c \
        wsmap.h
 
+if USE_DOCK_XDND
+wmaker_SOURCES += xdnd.c
+endif
 if USE_MWM_HINTS
 wmaker_SOURCES += motif.h motif.c
 endif
diff --git a/src/appicon.c b/src/appicon.c
index ed03ffc..14dba97 100644
--- a/src/appicon.c
+++ b/src/appicon.c
@@ -51,7 +51,7 @@
 #include "placement.h"
 #include "misc.h"
 #include "event.h"
-#ifdef XDND
+#ifdef USE_DOCK_XDND
 #include "xdnd.h"
 #endif
 
@@ -130,7 +130,7 @@ WAppIcon *wAppIconCreateForDock(WScreen *scr, const char 
*command, const char *w
                tile = TILE_CLIP;
        aicon->icon = icon_create_for_dock(scr, command, wm_instance, wm_class, 
tile);
 
-#ifdef XDND
+#ifdef USE_DOCK_XDND
        wXDNDMakeAwareness(aicon->icon->core->window);
 #endif
 
@@ -309,7 +309,7 @@ static WAppIcon *wAppIconCreate(WWindow *leader_win)
                aicon->wm_instance = wstrdup(leader_win->wm_instance);
 
        aicon->icon = icon_create_for_wwindow(leader_win);
-#ifdef XDND
+#ifdef USE_DOCK_XDND
        wXDNDMakeAwareness(aicon->icon->core->window);
 #endif
 
@@ -332,7 +332,7 @@ void wAppIconDestroy(WAppIcon * aicon)
        wIconDestroy(aicon->icon);
        if (aicon->command)
                wfree(aicon->command);
-#ifdef XDND
+#ifdef USE_DOCK_XDND
        if (aicon->dnd_command)
                wfree(aicon->dnd_command);
 #endif
diff --git a/src/appicon.h b/src/appicon.h
index 2456ba2..eb1904b 100644
--- a/src/appicon.h
+++ b/src/appicon.h
@@ -37,7 +37,7 @@ typedef struct WAppIcon {
        WIcon *icon;
        int x_pos, y_pos;               /* absolute screen coordinate */
        char *command;                  /* command used to launch app */
-#ifdef XDND
+#ifdef USE_DOCK_XDND
        char *dnd_command;              /* command to use when something is */
                                        /* dropped on us */
 #endif
diff --git a/src/dialog.c b/src/dialog.c
index 25c321e..b7b8f53 100644
--- a/src/dialog.c
+++ b/src/dialog.c
@@ -1316,7 +1316,7 @@ void wShowInfoPanel(WScreen *scr)
        strbuf = wstrappend(strbuf, ", MWM");
 #endif
 
-#ifdef XDND
+#ifdef USE_DOCK_XDND
        strbuf = wstrappend(strbuf, ", XDnD");
 #endif
 
diff --git a/src/dock.c b/src/dock.c
index 8853fa3..d4aca09 100644
--- a/src/dock.c
+++ b/src/dock.c
@@ -72,7 +72,7 @@
 
 static WMPropList *dCommand = NULL;
 static WMPropList *dPasteCommand = NULL;
-#ifdef XDND                    /* XXX was OFFIX */
+#ifdef USE_DOCK_XDND
 static WMPropList *dDropCommand = NULL;
 #endif
 static WMPropList *dAutoLaunch, *dLock;
@@ -135,7 +135,7 @@ static void make_keys(void)
 
        dCommand = WMRetainPropList(WMCreatePLString("Command"));
        dPasteCommand = WMRetainPropList(WMCreatePLString("PasteCommand"));
-#ifdef XDND
+#ifdef USE_DOCK_XDND
        dDropCommand = WMRetainPropList(WMCreatePLString("DropCommand"));
 #endif
        dLock = WMRetainPropList(WMCreatePLString("Lock"));
@@ -1496,13 +1496,13 @@ static WMPropList *make_icon_state(WAppIcon *btn)
                if (btn->dock != btn->icon->core->screen_ptr->dock && 
(btn->xindex != 0 || btn->yindex != 0))
                        WMPutInPLDictionary(node, dOmnipresent, omnipresent);
 
-#ifdef XDND                    /* was OFFIX */
+#ifdef USE_DOCK_XDND
                if (btn->dnd_command) {
                        command = WMCreatePLString(btn->dnd_command);
                        WMPutInPLDictionary(node, dDropCommand, command);
                        WMReleasePropList(command);
                }
-#endif                         /* XDND */
+#endif /* USE_DOCK_XDND */
 
                if (btn->paste_command) {
                        command = WMCreatePLString(btn->paste_command);
@@ -1682,7 +1682,7 @@ static WAppIcon *restore_icon_state(WScreen *scr, 
WMPropList *info, int type, in
        aicon->icon->core->descriptor.parent_type = WCLASS_DOCK_ICON;
        aicon->icon->core->descriptor.parent = aicon;
 
-#ifdef XDND                    /* was OFFIX */
+#ifdef USE_DOCK_XDND
        cmd = WMGetFromPLDictionary(info, dDropCommand);
        if (cmd)
                aicon->dnd_command = wstrdup(WMGetFromPLString(cmd));
@@ -1769,7 +1769,7 @@ WAppIcon *wClipRestoreState(WScreen *scr, WMPropList 
*clip_state)
                                wScreenKeepInside(scr, &icon->x_pos, 
&icon->y_pos, ICON_SIZE, ICON_SIZE);
                }
        }
-#ifdef XDND                    /* was OFFIX */
+#ifdef USE_DOCK_XDND
        value = WMGetFromPLDictionary(clip_state, dDropCommand);
        if (value && WMIsPLString(value))
                icon->dnd_command = wstrdup(WMGetFromPLString(value));
@@ -2035,7 +2035,7 @@ void wDockDoAutoLaunch(WDock *dock, int workspace)
        }
 }
 
-#ifdef XDND                    /* was OFFIX */
+#ifdef USE_DOCK_XDND
 static WDock *findDock(WScreen *scr, XEvent *event, int *icon_pos)
 {
        WDock *dock;
@@ -2117,7 +2117,7 @@ int wDockReceiveDNDDrop(WScreen *scr, XEvent *event)
        }
        return False;
 }
-#endif                         /* XDND */
+#endif /* USE_DOCK_XDND */
 
 Bool wDockAttachIcon(WDock *dock, WAppIcon *icon, int x, int y, Bool 
update_icon)
 {
@@ -2221,7 +2221,7 @@ Bool wDockAttachIcon(WDock *dock, WAppIcon *icon, int x, 
int y, Bool update_icon
        if (wPreferences.auto_arrange_icons)
                wArrangeIcons(dock->screen_ptr, True);
 
-#ifdef XDND                    /* was OFFIX */
+#ifdef USE_DOCK_XDND
        if (icon->command && !icon->dnd_command) {
                int len = strlen(icon->command) + 8;
                icon->dnd_command = wmalloc(len);
@@ -2401,7 +2401,7 @@ void wDockDetach(WDock *dock, WAppIcon *icon)
                wfree(icon->command);
                icon->command = NULL;
        }
-#ifdef XDND                    /* was OFFIX */
+#ifdef USE_DOCK_XDND
        if (icon->dnd_command) {
                wfree(icon->dnd_command);
                icon->dnd_command = NULL;
@@ -3347,7 +3347,7 @@ static void trackDeadProcess(pid_t pid, unsigned char 
status, WDock *dock)
                                char msg[PATH_MAX];
                                char *cmd;
 
-#ifdef XDND
+#ifdef USE_DOCK_XDND
                                if (icon->drop_launch)
                                        cmd = icon->dnd_command;
                                else
@@ -4770,11 +4770,11 @@ static WDock * drawerRestoreState(WScreen *scr, 
WMPropList *drawer_state)
        drawer = wDockCreate(scr, WM_DRAWER, WMGetFromPLString(value));
 
        /* restore DnD command and paste command */
-#ifdef XDND
+#ifdef USE_DOCK_XDND
        value = WMGetFromPLDictionary(drawer_state, dDropCommand);
        if (value && WMIsPLString(value))
                drawer->icon_array[0]->dnd_command = 
wstrdup(WMGetFromPLString(value));
-#endif /* XDND */
+#endif /* USE_DOCK_XDND */
 
        value = WMGetFromPLDictionary(drawer_state, dPasteCommand);
        if (value && WMIsPLString(value))
@@ -4912,14 +4912,14 @@ static WMPropList *drawerSaveState(WDock *drawer)
        WMPutInPLDictionary(drawer_state, dPosition, pstr);
        WMReleasePropList(pstr);
 
-#ifdef XDND
+#ifdef USE_DOCK_XDND
        /* Store its DnD command */
        if (ai->dnd_command) {
                pstr = WMCreatePLString(ai->dnd_command);
                WMPutInPLDictionary(drawer_state, dDropCommand, pstr);
                WMReleasePropList(pstr);
        }
-#endif /* XDND */
+#endif /* USE_DOCK_XDND */
 
        /* Store its paste command */
        if (ai->paste_command) {
diff --git a/src/dock.h b/src/dock.h
index 23281a9..1e00e5f 100644
--- a/src/dock.h
+++ b/src/dock.h
@@ -92,7 +92,7 @@ WAppIcon *wDockFindIconForWindow(WDock *dock, Window window);
 void wDockDoAutoLaunch(WDock *dock, int workspace);
 void wDockLaunchWithState(WAppIcon *btn, WSavedState *state);
 
-#ifdef XDND
+#ifdef USE_DOCK_XDND
 int wDockReceiveDNDDrop(WScreen *scr, XEvent *event);
 #endif
 
diff --git a/src/dockedapp.c b/src/dockedapp.c
index 44eaacd..a7c12d7 100644
--- a/src/dockedapp.c
+++ b/src/dockedapp.c
@@ -66,7 +66,7 @@ static void updatePasteCommand(WAppIcon * icon, char *command)
        icon->paste_command = command;
 }
 
-#ifdef XDND
+#ifdef USE_DOCK_XDND
 static void updateDNDCommand(WAppIcon * icon, char *command)
 {
        if (icon->dnd_command)
@@ -77,7 +77,7 @@ static void updateDNDCommand(WAppIcon * icon, char *command)
        }
        icon->dnd_command = command;
 }
-#endif                         /* XDND */
+#endif /* USE_DOCK_XDND */
 
 static void updateSettingsPanelIcon(AppSettingsPanel * panel)
 {
@@ -199,7 +199,7 @@ static void panelBtnCallback(WMWidget * self, void *data)
                        text = NULL;
                }
                updateCommand(panel->editedIcon, text);
-#ifdef XDND
+#ifdef USE_DOCK_XDND
                /* cannot free text from this, because it will be not be 
duplicated
                 * in updateDNDCommand */
                text = WMGetTextFieldText(panel->dndCommandField);
@@ -307,7 +307,7 @@ void ShowDockAppSettingsPanel(WAppIcon * aicon)
        panel->dndCommandLabel = WMCreateLabel(panel->dndCommandFrame);
        WMResizeWidget(panel->dndCommandLabel, 256, 18);
        WMMoveWidget(panel->dndCommandLabel, 10, 45);
-#ifdef XDND
+#ifdef USE_DOCK_XDND
        WMSetTextFieldText(panel->dndCommandField, aicon->dnd_command);
        WMSetLabelText(panel->dndCommandLabel, _("%d will be replaced with the 
file name"));
 #else
diff --git a/src/event.c b/src/event.c
index 3e2ecb6..ce316ee 100644
--- a/src/event.c
+++ b/src/event.c
@@ -40,7 +40,7 @@
 #ifdef USE_XSHAPE
 # include <X11/extensions/shape.h>
 #endif
-#ifdef XDND
+#ifdef USE_DOCK_XDND
 #include "xdnd.h"
 #endif
 
@@ -539,7 +539,7 @@ static void saveTimestamp(XEvent * event)
                break;
        case SelectionNotify:
                w_global.timestamp.last_event = event->xselection.time;
-#ifdef XDND
+#ifdef USE_DOCK_XDND
                wXDNDProcessSelection(event);
 #endif
                break;
@@ -1073,10 +1073,10 @@ static void handleClientMessage(XEvent * event)
                scr->flags.ignore_focus_events = event->xclient.data.l[0] ? 1 : 
0;
        } else if (wNETWMProcessClientMessage(&event->xclient)) {
                /* do nothing */
-#ifdef XDND
+#ifdef USE_DOCK_XDND
        } else if (wXDNDProcessClientMessage(&event->xclient)) {
                /* do nothing */
-#endif                         /* XDND */
+#endif /* USE_DOCK_XDND */
        } else {
                /*
                 * Non-standard thing, but needed by OffiX DND.
diff --git a/src/misc.c b/src/misc.c
index a12a97d..137d78e 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -622,7 +622,7 @@ char *ExpandOptions(WScreen *scr, const char *cmdline)
                                }
                                break;
 
-#ifdef XDND
+#ifdef USE_DOCK_XDND
                        case 'd':
                                if (!scr->xdestring) {
                                        scr->flags.dnd_data_convertion_status = 
1;
@@ -639,7 +639,7 @@ char *ExpandOptions(WScreen *scr, const char *cmdline)
                                strcat(out, scr->xdestring);
                                optr += slen;
                                break;
-#endif                         /* XDND */
+#endif /* USE_DOCK_XDND */
 
                        case 's':
                                if (!selection) {
diff --git a/src/screen.h b/src/screen.h
index dd524b8..8ffb6f9 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -283,7 +283,7 @@ typedef struct _WScreen {
     /* for window shortcuts */
     WMArray *shortcutWindows[MAX_WINDOW_SHORTCUTS];
 
-#ifdef XDND
+#ifdef USE_DOCK_XDND
     char *xdestring;
 #endif
 
diff --git a/src/startup.c b/src/startup.c
index c369dba..5f43cfd 100644
--- a/src/startup.c
+++ b/src/startup.c
@@ -68,7 +68,7 @@
 #include "wmspec.h"
 #include "event.h"
 #include "switchmenu.h"
-#ifdef XDND
+#ifdef USE_DOCK_XDND
 #include "xdnd.h"
 #endif
 
@@ -469,7 +469,7 @@ void StartUp(Bool defaultScreenOnly)
 
        w_global.atom.wm.ignore_focus_events = atom[20];
 
-#ifdef XDND
+#ifdef USE_DOCK_XDND
        wXDNDInitializeAtoms();
 #endif
 
diff --git a/src/xdnd.c b/src/xdnd.c
index afbbd44..63e6d9c 100644
--- a/src/xdnd.c
+++ b/src/xdnd.c
@@ -20,19 +20,20 @@
 
 /* Many part of code are ripped of an example from JX's site */
 
-#include "wconfig.h"
+#include "config.h"
 
-#ifdef XDND
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
 
 #include "WindowMaker.h"
 #include "dock.h"
 #include "xdnd.h"
 #include "workspace.h"
 
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <X11/Xatom.h>
 
 static Atom _XA_XdndAware;
 static Atom _XA_XdndEnter;
@@ -315,4 +316,3 @@ Bool wXDNDProcessClientMessage(XClientMessageEvent *event)
        }
        return False;
 }
-#endif
-- 
2.1.4


-- 
To unsubscribe, send mail to [email protected].

Reply via email to