1
0
mirror of https://github.com/gryf/wmaker.git synced 2026-02-11 19:25:49 +01:00

Added ability to set omnipresent icons in Clip.

This commit is contained in:
dan
1999-05-14 23:49:07 +00:00
parent 39513b9f35
commit 70a363de7b
25 changed files with 640 additions and 463 deletions

View File

@@ -31,6 +31,8 @@ Changes since version 0.53.0:
seb_bauer@bigfoot.com) seb_bauer@bigfoot.com)
- added GNUstep info panel (still needs beautification..) - added GNUstep info panel (still needs beautification..)
- made the paths selector in WPrefs.app use the open file panel - made the paths selector in WPrefs.app use the open file panel
- fixed a mem leak in superfluous mode caused by the ghost icon.
- added possibility to set omnipresent icons in Clip. See NEWS.
Changes since version 0.52.0: Changes since version 0.52.0:

View File

@@ -98,9 +98,9 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ./src/config.h CONFIG_HEADER = ./src/config.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \ DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \
Makefile.in NEWS TODO acinclude.m4 aclocal.m4 config.guess config.sub \ Makefile.in NEWS TODO acconfig.h acinclude.m4 aclocal.m4 config.guess \
configure configure.in install-sh ltconfig ltmain.sh missing \ config.sub configure configure.in install-sh ltconfig ltmain.sh missing \
mkinstalldirs mkinstalldirs src/config.h.in src/stamp-h.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
@@ -110,9 +110,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -124,6 +124,34 @@ config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF) cd $(srcdir) && $(AUTOCONF)
src/config.h: src/stamp-h
@if test ! -f $@; then \
rm -f src/stamp-h; \
$(MAKE) src/stamp-h; \
else :; fi
src/stamp-h: $(srcdir)/src/config.h.in $(top_builddir)/config.status
cd $(top_builddir) \
&& CONFIG_FILES= CONFIG_HEADERS=src/config.h \
$(SHELL) ./config.status
@echo timestamp > src/stamp-h 2> /dev/null
$(srcdir)/src/config.h.in: $(srcdir)/src/stamp-h.in
@if test ! -f $@; then \
rm -f $(srcdir)/src/stamp-h.in; \
$(MAKE) $(srcdir)/src/stamp-h.in; \
else :; fi
$(srcdir)/src/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
cd $(top_srcdir) && $(AUTOHEADER)
@echo timestamp > $(srcdir)/src/stamp-h.in 2> /dev/null
mostlyclean-hdr:
clean-hdr:
distclean-hdr:
-rm -f src/config.h
maintainer-clean-hdr:
# This directory's subdirectories are mostly independent; you can cd # This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile. # into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles, # To change the values of `make' variables: instead of editing Makefiles,
@@ -251,11 +279,6 @@ distdir: $(DISTFILES)
-rm -rf $(distdir) -rm -rf $(distdir)
mkdir $(distdir) mkdir $(distdir)
-chmod 777 $(distdir) -chmod 777 $(distdir)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
@@ -312,33 +335,33 @@ distclean-generic:
-rm -f config.cache config.log stamp-h stamp-h[0-9]* -rm -f config.cache config.log stamp-h stamp-h[0-9]*
maintainer-clean-generic: maintainer-clean-generic:
mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic
mostlyclean: mostlyclean-recursive mostlyclean: mostlyclean-recursive
clean-am: clean-tags clean-generic mostlyclean-am clean-am: clean-hdr clean-tags clean-generic mostlyclean-am
clean: clean-recursive clean: clean-recursive
distclean-am: distclean-tags distclean-generic clean-am distclean-am: distclean-hdr distclean-tags distclean-generic clean-am
-rm -f libtool -rm -f libtool
distclean: distclean-recursive distclean: distclean-recursive
-rm -f config.status -rm -f config.status
maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \
distclean-am maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;" @echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild." @echo "it deletes files that may require special tools to rebuild."
maintainer-clean: maintainer-clean-recursive maintainer-clean: maintainer-clean-recursive
-rm -f config.status -rm -f config.status
.PHONY: install-data-recursive uninstall-data-recursive \ .PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
install-exec-recursive uninstall-exec-recursive installdirs-recursive \ install-data-recursive uninstall-data-recursive install-exec-recursive \
uninstalldirs-recursive all-recursive check-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
installcheck-recursive info-recursive dvi-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \
mostlyclean-recursive distclean-recursive clean-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \

19
NEWS
View File

@@ -52,6 +52,25 @@ Default configuration for user specific menus installed in
and ~/GNUstep/Library/WindowMaker/UserMenus. and ~/GNUstep/Library/WindowMaker/UserMenus.
Omnipresent icons in Clip
-------------------------
Added ability to set icons docked in Clip to be omnipresent on all workspaces.
To set/reset this flag use the "Settings Panel" for that specific icon (right
click on docked icon, and select "Settings").
An icon can be set to omnipresent, only if its position is free in all the
workspaces, else you will be informed of the problem and asked to fix it first.
Also when dragging an omnipresent icon around in Clip, all the icons docked in
all the workspaces are shown while the dragging is done, to let one easily see
where are free slots in all workspaces.
Now before you load your gun to start a flame war because this is against your
principles you love so much, please sit down and think that this is a feature,
which, if you don't use, the old behaviour of the Clip is totally preserved.
It just adds some extra capabilities to the Clip for people who think that this
is useful.
--- 0.53.0 --- 0.53.0

View File

@@ -108,9 +108,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu WINGs/Resources/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WINGs/Resources/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -142,11 +142,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = WINGs/Resources subdir = WINGs/Resources
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WINGs/Resources/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -120,9 +120,9 @@ all: all-redirect
.SUFFIXES: .SUFFIXES:
.SUFFIXES: .mo .po .SUFFIXES: .mo .po
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu WPrefs.app/po/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WPrefs.app/po/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -135,11 +135,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = WPrefs.app/po subdir = WPrefs.app/po
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WPrefs.app/po/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -109,9 +109,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu WPrefs.app/tiff/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WPrefs.app/tiff/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -143,11 +143,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = WPrefs.app/tiff subdir = WPrefs.app/tiff
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WPrefs.app/tiff/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -109,9 +109,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu WPrefs.app/xpm/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WPrefs.app/xpm/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -143,11 +143,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = WPrefs.app/xpm subdir = WPrefs.app/xpm
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WPrefs.app/xpm/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -108,9 +108,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu WindowMaker/Backgrounds/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/Backgrounds/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -142,11 +142,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = WindowMaker/Backgrounds subdir = WindowMaker/Backgrounds
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WindowMaker/Backgrounds/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -110,9 +110,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu WindowMaker/Defaults/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/Defaults/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -144,11 +144,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = WindowMaker/Defaults subdir = WindowMaker/Defaults
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WindowMaker/Defaults/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -110,9 +110,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu WindowMaker/IconSets/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/IconSets/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -144,11 +144,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = WindowMaker/IconSets subdir = WindowMaker/IconSets
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WindowMaker/IconSets/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -109,9 +109,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu WindowMaker/Icons/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/Icons/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -143,11 +143,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = WindowMaker/Icons subdir = WindowMaker/Icons
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WindowMaker/Icons/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -111,9 +111,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu WindowMaker/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -231,11 +231,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = WindowMaker subdir = WindowMaker
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WindowMaker/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -109,9 +109,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu WindowMaker/Pixmaps/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/Pixmaps/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -143,11 +143,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = WindowMaker/Pixmaps subdir = WindowMaker/Pixmaps
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WindowMaker/Pixmaps/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -109,9 +109,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu WindowMaker/Styles/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/Styles/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -143,11 +143,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = WindowMaker/Styles subdir = WindowMaker/Styles
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WindowMaker/Styles/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -110,9 +110,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu WindowMaker/Themes/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/Themes/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -230,11 +230,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = WindowMaker/Themes subdir = WindowMaker/Themes
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WindowMaker/Themes/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -102,9 +102,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu contrib/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps contrib/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -117,11 +117,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = contrib subdir = contrib
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu contrib/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -109,9 +109,9 @@ GZIP_ENV = --best
all: all-redirect all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps doc/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -163,11 +163,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = doc subdir = doc
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu doc/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -120,9 +120,9 @@ all: all-redirect
.SUFFIXES: .SUFFIXES:
.SUFFIXES: .mo .po .SUFFIXES: .mo .po
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu po/Makefile cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps po/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \ cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
@@ -135,11 +135,6 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = po subdir = po
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu po/Makefile
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
d=$(srcdir); \ d=$(srcdir); \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \

View File

@@ -390,16 +390,14 @@ wAppIconPaint(WAppIcon *aicon)
{ {
WApplication *wapp; WApplication *wapp;
wapp = wApplicationOf(aicon->main_window); wapp = wApplicationOf(aicon->main_window);
if (wapp) { if (wapp && wapp->flags.hidden) {
if (wapp->flags.hidden) { XSetClipMask(dpy, scr->copy_gc, scr->dock_dots->mask);
XSetClipMask(dpy, scr->copy_gc, scr->dock_dots->mask); XSetClipOrigin(dpy, scr->copy_gc, 0, 0);
XSetClipOrigin(dpy, scr->copy_gc, 0, 0); XCopyArea(dpy, scr->dock_dots->image,
XCopyArea(dpy, scr->dock_dots->image, aicon->icon->core->window,
aicon->icon->core->window, scr->copy_gc, 0, 0, 7,
scr->copy_gc, 0, 0, 7, scr->dock_dots->height, 0, 0);
scr->dock_dots->height, 0, 0); }
}
}
} }
#endif /* HIDDENDOT */ #endif /* HIDDENDOT */
@@ -711,6 +709,7 @@ appIconMouseDown(WObjDescriptor *desc, XEvent *event)
int ix, iy; int ix, iy;
int clickButton = event->xbutton.button; int clickButton = event->xbutton.button;
Pixmap ghost = None; Pixmap ghost = None;
Window wins[2];
if (aicon->editing || WCHECK_STATE(WSTATE_MODAL)) if (aicon->editing || WCHECK_STATE(WSTATE_MODAL))
return; return;
@@ -757,6 +756,18 @@ appIconMouseDown(WObjDescriptor *desc, XEvent *event)
else else
dockable = canBeDocked(icon->owner); dockable = canBeDocked(icon->owner);
wins[0] = icon->core->window;
wins[1] = scr->dock_shadow;
XRestackWindows(dpy, wins, 2);
if (superfluous) {
if (icon->pixmap!=None)
ghost = MakeGhostIcon(scr, icon->pixmap);
else
ghost = MakeGhostIcon(scr, icon->core->window);
XSetWindowBackgroundPixmap(dpy, scr->dock_shadow,
ghost);
XClearWindow(dpy, scr->dock_shadow);
}
while (!done) { while (!done) {
WMMaskEvent(dpy, PointerMotionMask|ButtonReleaseMask|ButtonPressMask WMMaskEvent(dpy, PointerMotionMask|ButtonReleaseMask|ButtonPressMask
@@ -805,20 +816,6 @@ appIconMouseDown(WObjDescriptor *desc, XEvent *event)
XMoveWindow(dpy, scr->dock_shadow, shad_x, shad_y); XMoveWindow(dpy, scr->dock_shadow, shad_x, shad_y);
if (!docking) { if (!docking) {
Window wins[2];
wins[0] = icon->core->window;
wins[1] = scr->dock_shadow;
XRestackWindows(dpy, wins, 2);
if (superfluous) {
if (icon->pixmap!=None)
ghost = MakeGhostIcon(scr, icon->pixmap);
else
ghost = MakeGhostIcon(scr, icon->core->window);
XSetWindowBackgroundPixmap(dpy, scr->dock_shadow,
ghost);
XClearWindow(dpy, scr->dock_shadow);
}
XMapWindow(dpy, scr->dock_shadow); XMapWindow(dpy, scr->dock_shadow);
} }
docking = 1; docking = 1;
@@ -845,20 +842,6 @@ appIconMouseDown(WObjDescriptor *desc, XEvent *event)
XMoveWindow(dpy, scr->dock_shadow, shad_x, shad_y); XMoveWindow(dpy, scr->dock_shadow, shad_x, shad_y);
if (!docking) { if (!docking) {
Window wins[2];
wins[0] = icon->core->window;
wins[1] = scr->dock_shadow;
XRestackWindows(dpy, wins, 2);
if (superfluous) {
if (icon->pixmap!=None)
ghost = MakeGhostIcon(scr, icon->pixmap);
else
ghost = MakeGhostIcon(scr, icon->core->window);
XSetWindowBackgroundPixmap(dpy, scr->dock_shadow,
ghost);
XClearWindow(dpy, scr->dock_shadow);
}
XMapWindow(dpy, scr->dock_shadow); XMapWindow(dpy, scr->dock_shadow);
} }
docking = 1; docking = 1;

View File

@@ -76,6 +76,7 @@ typedef struct WAppIcon {
unsigned int gnustep_app:1; /* if this is a GNUstep application */ unsigned int gnustep_app:1; /* if this is a GNUstep application */
unsigned int docked:1; unsigned int docked:1;
unsigned int omnipresent:1; /* If omnipresent when docked in clip */
unsigned int attracted:1; /* If it was attracted by the clip */ unsigned int attracted:1; /* If it was attracted by the clip */
unsigned int launching:1; unsigned int launching:1;
unsigned int running:1; /* application is already running */ unsigned int running:1; /* application is already running */

View File

@@ -107,7 +107,7 @@ static proplist_t dAutoAttractIcons, dKeepAttracted;
static proplist_t dPosition, dApplications, dLowered, dCollapsed, dAutoCollapse; static proplist_t dPosition, dApplications, dLowered, dCollapsed, dAutoCollapse;
static proplist_t dAutoRaiseLower; static proplist_t dAutoRaiseLower, dOmnipresent;
static void dockIconPaint(WAppIcon *btn); static void dockIconPaint(WAppIcon *btn);
@@ -187,6 +187,8 @@ make_keys()
dAutoAttractIcons = PLMakeString("AutoAttractIcons"); dAutoAttractIcons = PLMakeString("AutoAttractIcons");
dKeepAttracted = PLMakeString("KeepAttracted"); dKeepAttracted = PLMakeString("KeepAttracted");
dOmnipresent = PLMakeString("Omnipresent");
dDock = PLMakeString("Dock"); dDock = PLMakeString("Dock");
dClip = PLMakeString("Clip"); dClip = PLMakeString("Clip");
} }
@@ -1277,6 +1279,7 @@ make_icon_state(WAppIcon *btn)
{ {
proplist_t node = NULL; proplist_t node = NULL;
proplist_t command, autolaunch, name, forced, host, position, buggy; proplist_t command, autolaunch, name, forced, host, position, buggy;
proplist_t omnipresent;
char *tmp; char *tmp;
char buffer[64]; char buffer[64];
@@ -1296,7 +1299,7 @@ make_icon_state(WAppIcon *btn)
forced = btn->forced_dock ? dYes : dNo; forced = btn->forced_dock ? dYes : dNo;
buggy = btn->buggy_app ? dYes: dNo; buggy = btn->buggy_app ? dYes : dNo;
if (btn == btn->icon->core->screen_ptr->clip_icon) if (btn == btn->icon->core->screen_ptr->clip_icon)
sprintf(buffer, "%i,%i", btn->x_pos, btn->y_pos); sprintf(buffer, "%i,%i", btn->x_pos, btn->y_pos);
@@ -1314,6 +1317,12 @@ make_icon_state(WAppIcon *btn)
PLRelease(command); PLRelease(command);
PLRelease(name); PLRelease(name);
PLRelease(position); PLRelease(position);
omnipresent = btn->omnipresent ? dYes : dNo;
if (btn->dock != btn->icon->core->screen_ptr->dock &&
(btn->xindex != 0 || btn->yindex != 0))
PLInsertDictionaryEntry(node, dOmnipresent, omnipresent);
#ifdef OFFIX_DND #ifdef OFFIX_DND
if (btn->dnd_command) { if (btn->dnd_command) {
command = PLMakeString(btn->dnd_command); command = PLMakeString(btn->dnd_command);
@@ -1553,6 +1562,20 @@ restore_icon_state(WScreen *scr, proplist_t info, int type, int index)
aicon->xindex = 0; aicon->xindex = 0;
} }
/* check if icon is omnipresent */
value = PLGetDictionaryEntry(info, dOmnipresent);
aicon->omnipresent = 0;
if (value) {
if (PLIsString(value)) {
if (strcasecmp(PLGetString(value), "YES")==0)
aicon->omnipresent = 1;
} else {
wwarning(_("bad value in docked icon state info %s"),
PLGetString(dOmnipresent));
}
}
aicon->running = 0; aicon->running = 0;
aicon->docked = 1; aicon->docked = 1;
@@ -2064,6 +2087,8 @@ wDockAttachIcon(WDock *dock, WAppIcon *icon, int x, int y)
icon->yindex = y; icon->yindex = y;
icon->xindex = x; icon->xindex = x;
icon->omnipresent = 0;
icon->x_pos = dock->x_pos + x*ICON_SIZE; icon->x_pos = dock->x_pos + x*ICON_SIZE;
icon->y_pos = dock->y_pos + y*ICON_SIZE; icon->y_pos = dock->y_pos + y*ICON_SIZE;
@@ -2127,6 +2152,9 @@ moveIconBetweenDocks(WDock *src, WDock *dest, WAppIcon *icon, int x, int y)
int argc; int argc;
int index; int index;
if (src == dest)
return True; /* No move needed, we're already there */
if (dest == NULL) if (dest == NULL)
return False; return False;
@@ -2167,6 +2195,9 @@ moveIconBetweenDocks(WDock *src, WDock *dest, WAppIcon *icon, int x, int y)
} }
} }
if (dest->type == WM_DOCK)
wClipMakeIconOmnipresent(icon, False);
for(index=1; index<src->max_icons; index++) { for(index=1; index<src->max_icons; index++) {
if(src->icon_array[index] == icon) if(src->icon_array[index] == icon)
break; break;
@@ -2249,6 +2280,11 @@ wDockDetach(WDock *dock, WAppIcon *icon)
icon->icon->force_paint = 1; icon->icon->force_paint = 1;
} }
/* This must be called before dock->icon_array[index] is set to NULL.
* Don't move it. -Dan
*/
wClipMakeIconOmnipresent(icon, False);
/* deselect the icon */ /* deselect the icon */
if (icon->icon->selected) if (icon->icon->selected)
wIconSelect(icon->icon); wIconSelect(icon->icon);
@@ -2271,6 +2307,7 @@ wDockDetach(WDock *dock, WAppIcon *icon)
dock->icon_array[index] = NULL; dock->icon_array[index] = NULL;
icon->yindex = -1; icon->yindex = -1;
icon->xindex = -1; icon->xindex = -1;
dock->icon_count--; dock->icon_count--;
/* if the dock is not attached to an application or /* if the dock is not attached to an application or
@@ -2359,6 +2396,7 @@ wDockSnapIcon(WDock *dock, WAppIcon *icon, int req_x, int req_y,
if (icon->dock != dock && ex_x != 0) if (icon->dock != dock && ex_x != 0)
return False; return False;
aicon = NULL;
for (i=0; i<dock->max_icons; i++) { for (i=0; i<dock->max_icons; i++) {
nicon = dock->icon_array[i]; nicon = dock->icon_array[i];
if (nicon && nicon->yindex == ex_y) { if (nicon && nicon->yindex == ex_y) {
@@ -2433,24 +2471,42 @@ wDockSnapIcon(WDock *dock, WAppIcon *icon, int req_x, int req_y,
} }
} else { /* CLIP */ } else { /* CLIP */
int neighbours = 0; int neighbours = 0;
int start, stop, k;
for (i=0; i<dock->max_icons; i++) { start = icon->omnipresent ? 0 : scr->current_workspace;
nicon = dock->icon_array[i]; stop = icon->omnipresent ? scr->workspace_count : start+1;
if (nicon && nicon->xindex == ex_x && nicon->yindex == ex_y) {
aicon = nicon;
break;
}
}
for (i=0; i<dock->max_icons; i++) { aicon = NULL;
nicon = dock->icon_array[i]; for (k=start; k<stop; k++) {
if (nicon && nicon != icon && /* Icon can't be it's own neighbour */ WDock *tmp = scr->workspaces[k]->clip;
(abs(nicon->xindex - ex_x) <= CLIP_ATTACH_VICINITY && if (!tmp)
abs(nicon->yindex - ex_y) <= CLIP_ATTACH_VICINITY)) { continue;
neighbours = 1; for (i=0; i<tmp->max_icons; i++) {
break; nicon = tmp->icon_array[i];
} if (nicon && nicon->xindex == ex_x && nicon->yindex == ex_y) {
} aicon = nicon;
break;
}
}
if (aicon)
break;
}
for (k=start; k<stop; k++) {
WDock *tmp = scr->workspaces[k]->clip;
if (!tmp)
continue;
for (i=0; i<tmp->max_icons; i++) {
nicon = tmp->icon_array[i];
if (nicon && nicon != icon && /* Icon can't be it's own neighbour */
(abs(nicon->xindex - ex_x) <= CLIP_ATTACH_VICINITY &&
abs(nicon->yindex - ex_y) <= CLIP_ATTACH_VICINITY)) {
neighbours = 1;
break;
}
}
if (neighbours)
break;
}
if (neighbours && (aicon==NULL || (redocking && aicon == icon))) { if (neighbours && (aicon==NULL || (redocking && aicon == icon))) {
*ret_x = ex_x; *ret_x = ex_x;
@@ -2833,20 +2889,17 @@ void
wDockHideIcons(WDock *dock) wDockHideIcons(WDock *dock)
{ {
int i; int i;
WAppIcon *btn;
if (dock==NULL) if (dock==NULL)
return; return;
btn = dock->icon_array[0];
for (i=1; i<dock->max_icons; i++) { for (i=1; i<dock->max_icons; i++) {
if (dock->icon_array[i]) if (dock->icon_array[i])
XUnmapWindow(dpy, dock->icon_array[i]->icon->core->window); XUnmapWindow(dpy, dock->icon_array[i]->icon->core->window);
} }
dock->mapped = 0; dock->mapped = 0;
dockIconPaint(btn); dockIconPaint(dock->icon_array[0]);
} }
@@ -3058,6 +3111,17 @@ wClipUpdateForWorkspaceChange(WScreen *scr, int workspace)
scr->clip_icon->dock = scr->workspaces[workspace]->clip; scr->clip_icon->dock = scr->workspaces[workspace]->clip;
if (scr->current_workspace != workspace) { if (scr->current_workspace != workspace) {
WDock *old_clip = scr->workspaces[scr->current_workspace]->clip; WDock *old_clip = scr->workspaces[scr->current_workspace]->clip;
WAppIconChain *chain = scr->global_icons;
while (chain) {
moveIconBetweenDocks(chain->aicon->dock,
scr->workspaces[workspace]->clip,
chain->aicon, chain->aicon->xindex,
chain->aicon->yindex);
if (scr->workspaces[workspace]->clip->collapsed)
XUnmapWindow(dpy, chain->aicon->icon->core->window);
chain = chain->next;
}
wDockHideIcons(old_clip); wDockHideIcons(old_clip);
if (old_clip->auto_raise_lower) { if (old_clip->auto_raise_lower) {
@@ -3207,7 +3271,7 @@ openDockMenu(WDock *dock, WAppIcon *aicon, XEvent *event)
/* this is the workspace submenu part */ /* this is the workspace submenu part */
if (scr->clip_submenu) if (scr->clip_submenu)
updateWorkspaceMenu(scr->clip_submenu, aicon); updateWorkspaceMenu(scr->clip_submenu, aicon);
index++; wMenuSetEnabled(dock->menu, ++index, !aicon->omnipresent);
/* remove icon(s) */ /* remove icon(s) */
entry = dock->menu->entries[++index]; entry = dock->menu->entries[++index];
@@ -3438,16 +3502,14 @@ handleDockMove(WDock *dock, WAppIcon *aicon, XEvent *event)
if (ev.xmotion.x_root > dock->x_pos + ICON_SIZE*2) { if (ev.xmotion.x_root > dock->x_pos + ICON_SIZE*2) {
XMoveWindow(dpy, scr->dock_shadow, scr->scr_width-ICON_SIZE XMoveWindow(dpy, scr->dock_shadow, scr->scr_width-ICON_SIZE
-DOCK_EXTRA_SPACE-1, dock->y_pos); -DOCK_EXTRA_SPACE-1, dock->y_pos);
if (superfluous) { if (superfluous && ghost==None) {
if (ghost==None) { ghost = MakeGhostDock(dock, dock->x_pos,
ghost = MakeGhostDock(dock, dock->x_pos, scr->scr_width-ICON_SIZE
scr->scr_width-ICON_SIZE -DOCK_EXTRA_SPACE-1,
-DOCK_EXTRA_SPACE-1, dock->y_pos);
dock->y_pos); XSetWindowBackgroundPixmap(dpy, scr->dock_shadow,
XSetWindowBackgroundPixmap(dpy, scr->dock_shadow, ghost);
ghost); XClearWindow(dpy, scr->dock_shadow);
XClearWindow(dpy, scr->dock_shadow);
}
} }
XMapRaised(dpy, scr->dock_shadow); XMapRaised(dpy, scr->dock_shadow);
swapped = 1; swapped = 1;
@@ -3464,14 +3526,12 @@ handleDockMove(WDock *dock, WAppIcon *aicon, XEvent *event)
if (ev.xmotion.x_root < dock->x_pos - ICON_SIZE) { if (ev.xmotion.x_root < dock->x_pos - ICON_SIZE) {
XMoveWindow(dpy, scr->dock_shadow, XMoveWindow(dpy, scr->dock_shadow,
DOCK_EXTRA_SPACE, dock->y_pos); DOCK_EXTRA_SPACE, dock->y_pos);
if (superfluous) { if (superfluous && ghost==None) {
if (ghost==None) { ghost = MakeGhostDock(dock, dock->x_pos,
ghost = MakeGhostDock(dock, dock->x_pos, DOCK_EXTRA_SPACE, dock->y_pos);
DOCK_EXTRA_SPACE, dock->y_pos); XSetWindowBackgroundPixmap(dpy, scr->dock_shadow,
XSetWindowBackgroundPixmap(dpy, scr->dock_shadow, ghost);
ghost); XClearWindow(dpy, scr->dock_shadow);
XClearWindow(dpy, scr->dock_shadow);
}
} }
XMapRaised(dpy, scr->dock_shadow); XMapRaised(dpy, scr->dock_shadow);
swapped = -1; swapped = -1;
@@ -3539,6 +3599,8 @@ handleIconMove(WDock *dock, WAppIcon *aicon, XEvent *event)
Pixmap ghost = None; Pixmap ghost = None;
Bool docked; Bool docked;
int superfluous = wPreferences.superfluous; /* we catch it to avoid problems */ int superfluous = wPreferences.superfluous; /* we catch it to avoid problems */
int omnipresent = aicon->omnipresent; /* this must be cached!!! */
if (wPreferences.flags.noupdates) if (wPreferences.flags.noupdates)
return; return;
@@ -3602,6 +3664,15 @@ handleIconMove(WDock *dock, WAppIcon *aicon, XEvent *event)
} }
} }
if (omnipresent) {
int i;
for (i=0; i<scr->workspace_count; i++) {
if (i == scr->current_workspace)
continue;
wDockShowIcons(scr->workspaces[i]->clip);
}
}
x = ev.xmotion.x_root - ofs_x; x = ev.xmotion.x_root - ofs_x;
y = ev.xmotion.y_root - ofs_y; y = ev.xmotion.y_root - ofs_y;
tmp = wDockSnapIcon(dock, aicon, x, y, &ix, &iy, True); tmp = wDockSnapIcon(dock, aicon, x, y, &ix, &iy, True);
@@ -3711,6 +3782,15 @@ handleIconMove(WDock *dock, WAppIcon *aicon, XEvent *event)
XFreePixmap(dpy, ghost); XFreePixmap(dpy, ghost);
XSetWindowBackground(dpy, scr->dock_shadow, scr->white_pixel); XSetWindowBackground(dpy, scr->dock_shadow, scr->white_pixel);
} }
if (omnipresent) {
int i;
for (i=0; i<scr->workspace_count; i++) {
if (i == scr->current_workspace)
continue;
wDockHideIcons(scr->workspaces[i]->clip);
}
}
#ifdef DEBUG #ifdef DEBUG
puts("End icon move"); puts("End icon move");
#endif #endif
@@ -3857,7 +3937,7 @@ iconMouseDown(WObjDescriptor *desc, XEvent *event)
handleIconMove(dock, aicon, event); handleIconMove(dock, aicon, event);
} else if (event->xbutton.button==Button2 && dock->type==WM_CLIP && } else if (event->xbutton.button==Button2 && dock->type==WM_CLIP &&
aicon->xindex==0 && aicon->yindex==0) { aicon==scr->clip_icon) {
openClipWorkspaceMenu(scr, event->xbutton.x_root+2, openClipWorkspaceMenu(scr, event->xbutton.x_root+2,
event->xbutton.y_root+2); event->xbutton.y_root+2);
if (scr->clip_ws_menu) { if (scr->clip_ws_menu) {
@@ -3868,6 +3948,11 @@ iconMouseDown(WObjDescriptor *desc, XEvent *event)
event->xany.send_event = True; event->xany.send_event = True;
(*desc->handle_mousedown)(desc, event); (*desc->handle_mousedown)(desc, event);
} }
#if 1
} else if (event->xbutton.button==Button2 && dock->type==WM_CLIP &&
(event->xbutton.state & ShiftMask) && aicon!=scr->clip_icon) {
wClipMakeIconOmnipresent(aicon, !aicon->omnipresent);
#endif
} else if (event->xbutton.button == Button3) { } else if (event->xbutton.button == Button3) {
openDockMenu(dock, aicon, event); openDockMenu(dock, aicon, event);
} }
@@ -3922,13 +4007,19 @@ clipEnterNotify(WObjDescriptor *desc, XEvent *event)
{ {
WAppIcon *btn = (WAppIcon*)desc->parent; WAppIcon *btn = (WAppIcon*)desc->parent;
WDock *dock; WDock *dock;
WScreen *scr;
assert(event->type==EnterNotify); assert(event->type==EnterNotify);
if(desc->parent_type!=WCLASS_DOCK_ICON) if(desc->parent_type!=WCLASS_DOCK_ICON)
return; return;
dock = btn->dock; scr = btn->icon->core->screen_ptr;
if (!btn->omnipresent)
dock = btn->dock;
else
dock = scr->workspaces[scr->current_workspace]->clip;
if (!dock || dock->type!=WM_CLIP) if (!dock || dock->type!=WM_CLIP)
return; return;
@@ -4092,3 +4183,87 @@ clipAutoRaise(void *cdata)
dock->auto_raise_magic = NULL; dock->auto_raise_magic = NULL;
} }
static Bool
iconCanBeOmnipresent(WAppIcon *aicon)
{
WScreen *scr = aicon->icon->core->screen_ptr;
WDock *clip;
WAppIcon *btn;
int i, j;
Bool ocupied = False;
for (i=0; i<scr->workspace_count; i++) {
clip = scr->workspaces[i]->clip;
if (clip == aicon->dock)
continue;
for (j=0; j<clip->max_icons; j++) {
btn = clip->icon_array[j];
if(btn && btn->xindex==aicon->xindex && btn->yindex==aicon->yindex) {
ocupied = True;
break;
}
}
}
return !ocupied;
}
int
wClipMakeIconOmnipresent(WAppIcon *aicon, int omnipresent)
{
WScreen *scr = aicon->icon->core->screen_ptr;
WAppIconChain *new_entry, *tmp, *tmp1;
int status = WO_SUCCESS;
if (aicon->dock == scr->dock)
return WO_NOT_APPLICABLE;
if (aicon->omnipresent == omnipresent)
return WO_SUCCESS;
if (omnipresent) {
if (iconCanBeOmnipresent(aicon)) {
aicon->omnipresent = 1;
new_entry = wmalloc(sizeof(WAppIconChain));
new_entry->aicon = aicon;
new_entry->next = NULL;
if (!scr->global_icons) {
scr->global_icons = new_entry;
} else {
tmp = scr->global_icons;
while (tmp->next)
tmp = tmp->next;
tmp->next = new_entry;
}
} else {
aicon->omnipresent = 0;
status = WO_FAILED;
}
} else {
aicon->omnipresent = 0;
if (aicon == scr->global_icons->aicon) {
tmp = scr->global_icons->next;
free(scr->global_icons);
scr->global_icons = tmp;
} else {
tmp = scr->global_icons;
while (tmp->next) {
if (tmp->next->aicon == aicon) {
tmp1 = tmp->next->next;
free(tmp->next);
tmp->next = tmp1;
break;
}
tmp = tmp->next;
}
}
}
return status;
}

View File

@@ -109,4 +109,10 @@ void wClipUpdateForWorkspaceChange(WScreen *scr, int workspace);
RImage *wClipMakeTile(WScreen *scr, RImage *normalTile); RImage *wClipMakeTile(WScreen *scr, RImage *normalTile);
#define WO_FAILED 0
#define WO_NOT_APPLICABLE 1
#define WO_SUCCESS 2
int wClipMakeIconOmnipresent(WAppIcon *aicon, int omnipresent);
#endif #endif

View File

@@ -66,6 +66,7 @@ typedef struct _AppSettingsPanel {
WMButton *browseBtn; WMButton *browseBtn;
WMButton *autoLaunchBtn; WMButton *autoLaunchBtn;
WMButton *omnipresentBtn;
WMButton *okBtn; WMButton *okBtn;
WMButton *cancelBtn; WMButton *cancelBtn;
@@ -193,7 +194,7 @@ panelBtnCallback(WMWidget *self, void *data)
WMButton *btn = self; WMButton *btn = self;
AppSettingsPanel *panel = (AppSettingsPanel*)data; AppSettingsPanel *panel = (AppSettingsPanel*)data;
char *text; char *text;
int done; int done, omnipresent;
done = 1; done = 1;
if (panel->okBtn == btn) { if (panel->okBtn == btn) {
@@ -244,6 +245,18 @@ panelBtnCallback(WMWidget *self, void *data)
updateDNDCommand(panel->editedIcon, text); updateDNDCommand(panel->editedIcon, text);
#endif #endif
omnipresent = WMGetButtonSelected(panel->omnipresentBtn);
if (wClipMakeIconOmnipresent(panel->editedIcon, omnipresent) ==
WO_FAILED) {
wMessageDialog(panel->wwin->screen_ptr, _("Error"),
_("Sorry, icon cannot be made omnipresent. "
"Please make sure that no other icon is "
"docked in the same position on the other "
"workspaces, and try again."),
_("OK"), NULL, NULL);
return;
}
panel->editedIcon->auto_launch = panel->editedIcon->auto_launch =
WMGetButtonSelected(panel->autoLaunchBtn); WMGetButtonSelected(panel->autoLaunchBtn);
} }
@@ -254,7 +267,7 @@ panelBtnCallback(WMWidget *self, void *data)
#define PWIDTH 295 #define PWIDTH 295
#define PHEIGHT 345 #define PHEIGHT 375
void void
@@ -298,10 +311,19 @@ ShowDockAppSettingsPanel(WAppIcon *aicon)
_("Start when WindowMaker is started")); _("Start when WindowMaker is started"));
WMSetButtonSelected(panel->autoLaunchBtn, aicon->auto_launch); WMSetButtonSelected(panel->autoLaunchBtn, aicon->auto_launch);
panel->omnipresentBtn = WMCreateSwitchButton(panel->win);
WMResizeWidget(panel->omnipresentBtn, PWIDTH-30, 20);
WMMoveWidget(panel->omnipresentBtn, 15, 102);
WMSetButtonText(panel->omnipresentBtn,
_("Omnipresent application icon"));
WMSetButtonEnabled(panel->omnipresentBtn,
aicon->dock!=scr->dock && aicon!=scr->clip_icon);
WMSetButtonSelected(panel->omnipresentBtn, (aicon->omnipresent ||
aicon->dock==scr->dock || aicon==scr->clip_icon));
panel->commandFrame = WMCreateFrame(panel->win); panel->commandFrame = WMCreateFrame(panel->win);
WMResizeWidget(panel->commandFrame, 275, 50); WMResizeWidget(panel->commandFrame, 275, 50);
WMMoveWidget(panel->commandFrame, 10, 105); WMMoveWidget(panel->commandFrame, 10, 130);
WMSetFrameTitle(panel->commandFrame, _("Application path and arguments")); WMSetFrameTitle(panel->commandFrame, _("Application path and arguments"));
panel->commandField = WMCreateTextField(panel->commandFrame); panel->commandField = WMCreateTextField(panel->commandFrame);
@@ -311,7 +333,7 @@ ShowDockAppSettingsPanel(WAppIcon *aicon)
panel->dndCommandFrame = WMCreateFrame(panel->win); panel->dndCommandFrame = WMCreateFrame(panel->win);
WMResizeWidget(panel->dndCommandFrame, 275, 70); WMResizeWidget(panel->dndCommandFrame, 275, 70);
WMMoveWidget(panel->dndCommandFrame, 10, 165); WMMoveWidget(panel->dndCommandFrame, 10, 190);
WMSetFrameTitle(panel->dndCommandFrame, WMSetFrameTitle(panel->dndCommandFrame,
_("Command for files dropped with DND")); _("Command for files dropped with DND"));
@@ -334,7 +356,7 @@ ShowDockAppSettingsPanel(WAppIcon *aicon)
panel->iconFrame = WMCreateFrame(panel->win); panel->iconFrame = WMCreateFrame(panel->win);
WMResizeWidget(panel->iconFrame, 275, 50); WMResizeWidget(panel->iconFrame, 275, 50);
WMMoveWidget(panel->iconFrame, 10, 245); WMMoveWidget(panel->iconFrame, 10, 270);
WMSetFrameTitle(panel->iconFrame, _("Icon Image")); WMSetFrameTitle(panel->iconFrame, _("Icon Image"));
panel->iconField = WMCreateTextField(panel->iconFrame); panel->iconField = WMCreateTextField(panel->iconFrame);
@@ -353,13 +375,13 @@ ShowDockAppSettingsPanel(WAppIcon *aicon)
panel->okBtn = WMCreateCommandButton(panel->win); panel->okBtn = WMCreateCommandButton(panel->win);
WMResizeWidget(panel->okBtn, 80, 26); WMResizeWidget(panel->okBtn, 80, 26);
WMMoveWidget(panel->okBtn, 200, 308); WMMoveWidget(panel->okBtn, 200, 333);
WMSetButtonText(panel->okBtn, _("OK")); WMSetButtonText(panel->okBtn, _("OK"));
WMSetButtonAction(panel->okBtn, panelBtnCallback, panel); WMSetButtonAction(panel->okBtn, panelBtnCallback, panel);
panel->cancelBtn = WMCreateCommandButton(panel->win); panel->cancelBtn = WMCreateCommandButton(panel->win);
WMResizeWidget(panel->cancelBtn, 80, 26); WMResizeWidget(panel->cancelBtn, 80, 26);
WMMoveWidget(panel->cancelBtn, 110, 308); WMMoveWidget(panel->cancelBtn, 110, 333);
WMSetButtonText(panel->cancelBtn, _("Cancel")); WMSetButtonText(panel->cancelBtn, _("Cancel"));
WMSetButtonAction(panel->cancelBtn, panelBtnCallback, panel); WMSetButtonAction(panel->cancelBtn, panelBtnCallback, panel);

View File

@@ -62,6 +62,11 @@ typedef struct WReservedArea {
#endif #endif
typedef struct WAppIconChain {
struct WAppIcon *aicon;
struct WAppIconChain *next;
} WAppIconChain;
/* /*
* each WScreen is saved into a context associated with it's root window * each WScreen is saved into a context associated with it's root window
@@ -230,6 +235,7 @@ typedef struct _WScreen {
struct WMenu *clip_options; /* Options for Clip */ struct WMenu *clip_options; /* Options for Clip */
struct WMenu *clip_ws_menu; /* workspace menu for clip */ struct WMenu *clip_ws_menu; /* workspace menu for clip */
struct WDock *last_dock; struct WDock *last_dock;
WAppIconChain *global_icons; /* for omnipresent icons chain in clip */
Window clip_balloon; /* window for workspace name */ Window clip_balloon; /* window for workspace name */

View File

@@ -869,7 +869,7 @@ wWorkspaceRestoreState(WScreen *scr)
{ {
proplist_t parr, pstr, wks_state; proplist_t parr, pstr, wks_state;
proplist_t clip_state; proplist_t clip_state;
int i, wscount; int i, j, wscount;
make_keys(); make_keys();
@@ -899,9 +899,24 @@ wWorkspaceRestoreState(WScreen *scr)
if (scr->workspaces[i]->clip) if (scr->workspaces[i]->clip)
wDockDestroy(scr->workspaces[i]->clip); wDockDestroy(scr->workspaces[i]->clip);
scr->workspaces[i]->clip = wDockRestoreState(scr, clip_state, scr->workspaces[i]->clip = wDockRestoreState(scr, clip_state,
WM_CLIP); WM_CLIP);
if (i>0) if (i>0)
wDockHideIcons(scr->workspaces[i]->clip); wDockHideIcons(scr->workspaces[i]->clip);
/* We set the global icons here, because scr->workspaces[i]->clip
* was not valid in wDockRestoreState().
* There we only set icon->omnipresent to know which icons we
* need to set here.
*/
for (j=0; j<scr->workspaces[i]->clip->max_icons; j++) {
WAppIcon *aicon = scr->workspaces[i]->clip->icon_array[j];
if (aicon && aicon->omnipresent) {
aicon->omnipresent = 0;
wClipMakeIconOmnipresent(aicon, True);
XMapWindow(dpy, aicon->icon->core->window);
}
}
} }
#ifdef KWM_HINTS #ifdef KWM_HINTS
wKWMUpdateWorkspaceNameHint(scr, i); wKWMUpdateWorkspaceNameHint(scr, i);