1
0
mirror of https://github.com/gryf/wmaker.git synced 2026-07-09 12:16:38 +02:00

Compare commits

...

30 Commits

Author SHA1 Message Date
Страхиња Радић 4b946f69e2 Update Serbian translation from master branch
Signed-off-by: Страхиња Радић <contact@strahinja.org>
2023-11-02 21:03:07 +00:00
Страхиња Радић d55be193b8 Edit leftover automake files and READMEs for Serbian localization
This patch adds sr.po files to Makefile.am files throughout the repository
where needed. It also adds credits for Serbian localization in README files as
needed.

Signed-off-by: Страхиња Радић <contact@strahinja.org>
2023-11-02 19:28:30 +00:00
Strahinya e5b227fe8d Add Serbian localization
This patch adds Serbian localization to Window Maker.

Signed-off-by: Страхиња Радић <contact@strahinja.org>
2023-11-01 19:36:20 +00:00
Страхиња Радић d947095881 util/wmgenmenu.c(main): Close parentheses around vgradient
Currently, menu definitions created by wmgenmenu don't include the closing
parenthesis in vgradient constructs. This patch adds the missing closing
parentheses.

Signed-off-by: Страхиња Радић <contact@strahinja.org>
2023-11-01 13:25:52 +00:00
Carlos R. Mafra 93b049356f Revert "WUtil: Be more strict about base directory for wmkdirhier()"
This reverts commit a0b283a60f,
as it breaks saving the history in ~GNUstep/.AppInfo/WindowMaker/History
by restricting modifications to either ~GNUstep/Defaults or ~GNUstep/Library.

Thanks to Paul Selig for reporting this issue.
2023-08-21 22:22:32 +01:00
Carlos R. Mafra 75f353bef4 Update .gitignore
Since

fc63d72032 (WINGs: Fix incorrect use of macro USE_PANGO in installed header)

and

0e274dc979 (WRaster: Fix incorrect use of macro USE_XSHM in installed header)

the files wrlib/wraster.h and WINGs/WINGs/WINGsP.h are generated by the compilation,
so add them to .gitignore
2023-08-21 21:35:30 +01:00
Christophe CURIS 2264ed9de6 Fix calculation of version number in the library mapfiles
As reported by Andreas Metzler, the latest API change in lib WRaster caused
a compatibility issue because the internal version number was increased.

To correctly handle this situation, this patch does 2 things:
 - do not discard the 2 last number in the "c:r:a" version, because we need them;
 - when calculating the version for the mapfile, use the formula that is
suggested in libtool's documentation.

The purpose of the formula is that when API is changed, if a new function
is added then the version is not incremented to reflect that we are still
compatible with current binaries, it will be incremented only when there
is a break in compatibility.
2023-08-12 21:53:52 +01:00
Carlos R. Mafra d0aa2cefcd Window Maker 0.96.0 2023-08-05 08:46:23 +01:00
David Maciejak a52d13c8b8 Fix autoconf obsolete macros
autogen.sh is reporting some warnings as below

./autogen.sh 2>&1 |grep "obsolete"
libtoolize: copying file 'm4/lt~obsolete.m4'
configure.ac:115: warning: The macro `AC_LANG_C' is obsolete.
configure.ac:115: warning: The macro `AC_TRY_COMPILE' is obsolete.
configure.ac:134: warning: The macro `AC_LANG_C' is obsolete.
configure.ac:134: warning: The macro `AC_TRY_COMPILE' is obsolete.
configure.ac:135: warning: The macro `AC_LANG_C' is obsolete.
configure.ac:135: warning: The macro `AC_TRY_COMPILE' is obsolete.
configure.ac:146: warning: The macro `AC_LANG_C' is obsolete.
configure.ac:146: warning: The macro `AC_TRY_COMPILE' is obsolete.
configure.ac:146: warning: The macro `AC_LANG_C' is obsolete.
configure.ac:146: warning: The macro `AC_TRY_COMPILE' is obsolete.
configure.ac:373: warning: The macro `AC_LANG_C' is obsolete.
configure.ac:373: warning: The macro `AC_TRY_COMPILE' is obsolete.
configure.ac:458: warning: The macro `AC_HEADER_TIME' is obsolete.
configure.ac:681: warning: The macro `AC_TRY_LINK' is obsolete.
configure.ac:807: warning: The macro `AC_TRY_LINK' is obsolete.

As the minimum autoconf version required is v2.69,
we need to make sure to update obsolete macros as described at
https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Obsolete-Macros.html
2023-04-14 23:45:00 +01:00
David Maciejak 215b6ee2e6 Set proper motif wm hints name
Just a cosmetic change as the variable is currently not in use.
According to the Motif Toolkit API and MwmUtil.h, the last long
variable from the Motif WM Hints struct is currenlty used
for the status.
2023-04-09 10:42:52 +01:00
David Maciejak ab45c6c6c2 Add central position feature for active window
This patch adds a new Central feature under the window menu
"Other maximization" entry.
Shortcut can be configured via WPrefs "Center active window" action.
When called the active window is centered on the screen head.
If the window height or width are bigger than the head size,
the window is resized to fit.
There are some transitions defined as below:
*from fullscreen to center
*from any corner to center
*from top half to center top half
*from bottom half to center bottom half
*from left half to center left half
*from right half to center right half

Undoing the action is done via the window menu "Unmaximize" entry
or the shortcut.
2023-03-31 09:11:38 +01:00
David Maciejak 3344f2b040 NEWS: Hot corners feature description
Add an entry in the NEWS to describe the Hot Corners feature.
2023-03-26 10:35:33 +01:00
David Maciejak ecef2b2890 WPrefs: Hot corner preferences
Add a new "Hot Corner Shortcut Preferences" section to WPrefs
to configure the Hot Corners feature.
2023-03-26 10:35:33 +01:00
David Maciejak 802cbc0d75 Hot corners feature core
Add mouse pointer position detection to trigger the corner actions.

Screen corners can be assigned an external command to be
executed when the mouse pointer is entering those areas.

In WPrefs, "Hot Corner Shortcut Preferences" can be used
for configuration or by manually adding a "HotCorners" key
and value to "YES" in the ~/GNUstep/Defaults/WindowMaker file.

Actions are specified by the "HotCornerActions" and are defined
as a four entries list ("top left action", "top right action",
"bottom left action", "bottom right action").
A screen corner area is a cube shape defined by the "HotCornerEdge"
which is a number of pixels from 2 (by default) to 10.

To lower the risk of triggering that feature accidentally a
"HotCornerDelay" key can be used which is the time before the action
is triggered while the pointer is in one of the screen corner.
Default value is 250 ms.

Hot Corners feature is disabled by default.
2023-03-26 10:35:33 +01:00
David Maciejak 157d1ba85f Fix internal function name typo
The patch is to fix a typo in the fct name movePionterToWindowCenter
2023-03-23 12:57:58 +00:00
David Maciejak 91e7f37074 WPrefs: fix keyboard shortcut sorting order
That patch is fixing some Actions entries that are not sorted properly.
One is using some upper/lower cases.
And the other one, is displaying numbers while alphabetic sorting is not
working properly on numbers. For example:
Shortcut for window 1
Shortcut for window 10
Shortcut for window 2
...
2023-03-21 15:20:19 +00:00
David Maciejak 18a539b372 Add some more cases to handle window unusual size request
As discussed on the ML, the test to check for CARD16 limit is probably innacurate.
Check instead for maxH and maxW which are set by default to twice the size
of the screen or to the max values passed by the window normal hints property.
2023-03-16 15:02:18 +00:00
David Maciejak eae9200c5d Fix ICCM ConfigureNotify request
According to ICCM specs at [1]

*Not changing the size, location, border width, or stacking order of the window at all.
A client will receive a synthetic ConfigureNotify event that describes the (unchanged)
geometry of the window. The (x,y) coordinates will be in the root coordinate system,
adjusted for the border width the client requested, irrespective of any reparenting
that has taken place. The border_width will be the border width the client requested.
The client will not receive a real ConfigureNotify event because no change has actually
taken place.

*Moving or restacking the window without resizing it or changing its border width.
A client will receive a synthetic ConfigureNotify event following the change that
describes the new geometry of the window. The event's (x,y) coordinates will be in
the root coordinate system adjusted for the border width the client requested.
The border_width will be the border width the client requested. The client may not
receive a real ConfigureNotify event that describes this change because the window
manager may have reparented the top-level window. If the client does receive a
real event, the synthetic event will follow the real one.

*Resizing the window or changing its border width
(regardless of whether the window was also moved or restacked).
A client that has selected for StructureNotify events will receive a real
ConfigureNotify event.
Note that the coordinates in this event are relative to the parent,
which may not be the root if the window has been reparented. The coordinates will
reflect the actual border width of the window (which the window manager may have
changed). The TranslateCoordinates request can be used to convert the coordinates
if required.

In Window Maker, the first case is not implemented: doing a synthetic ConfigureNotify
to notify no changes were done. That's creating some issues with app like Citrix icaclient
when sometime windows are blank and need to be moved to be refreshed.

[1]https://x.org/releases/X11R7.6/doc/xorg-docs/specs/ICCCM/icccm.html#configuring_the_window
2023-03-16 15:02:18 +00:00
David Maciejak 25cb9d208a Update window.c copyright
Just updating the copyright line in the file header.
2023-03-16 15:02:18 +00:00
David Maciejak 23471b2e21 WPrefs: update maximization feature descriptions
Align the old maximization descriptions to the new visual indicator
names. The internal shortcut names had also been updated, meaning a
reconfiguration of the shortcuts in WPrefs is required.
2023-03-16 11:36:02 +00:00
David Maciejak 258ffc8b97 Window menu: add maximization visual indicators
Add visual indicators for the maximization options in the window menu.
2023-03-14 12:27:16 +00:00
David Maciejak 86b7ec1a58 Restore proper drawer direction when screen was resized
Since 48d4820dee the dock is positioned
dynamically based on the screen midpoint.
The side issue using such method is if in case the screen was temporarily
resized the dock as a chance to be displayed on the other side making
the drawer saved configuration from WMState esp the direction wrong when
wm is started again.
For example, the dock and drawer are displayed on the right of the screen.
Then the screen resolution is downsized temporaily to half or less of
the previous size. The position stored in WMState will be updated and the
direction of the drawer is still opening on the left.
But on next wm start, when reading the conf.
The position of the dock and drawer are corresponding to the
middle or less of the unresized screen. The dock and drawer will be sticked
on the left. But the drawer direction was not updated and still opening
on the left (which is out of the screen).
2023-03-14 12:27:16 +00:00
Doug Torrance 9831e3f72a Move declarations to beginning of switch statements
Several variable declarations were recently added immediately after
labels, but this causes compile errors in GCC versions prior to 11,
e.g.,

    wsmap.c: In function ‘handle_event’:
    wsmap.c:534:4: error: a label can only be part of a statement and a declaration is not a statement
      534 |    WMScreen *wmscr = wsmap->scr->wmscreen;
          |    ^~~~~~~~

We move these declarations to the top of the corresponding switch
statements so that Window Maker can compile on these older versions of
GCC.
2023-03-13 15:33:21 +00:00
David Maciejak 0a55facac0 wmiv: align version with wm
Use wm version for the wmiv util.
2023-03-13 15:32:19 +00:00
David Maciejak 0ecf7d3540 KeepDockOnPrimaryHead: fix drawer direction
When that option is on, swapping drawer does not always mean
swapping drawer direction. For example if drawer is on the left
side of the second head and moving to the left side of the first head,
the direction should be the same.
2023-03-13 15:32:19 +00:00
David Maciejak 4576b5bf1e Info Panel: display proper number of colors in deepcolor env
Instead of displaying a number of unitary colors in 10bit env,
display a more human readable message.
2023-03-13 15:32:19 +00:00
David Maciejak 0526ddfc54 WINGs: Make the Extras examples to compile
There is a table view example which is not compiling cause
of a missing lib, also fixed some warnings.
2023-03-12 09:44:10 +00:00
David Maciejak 4c52232ee7 Window titlebar double click to unmaximize
Commit 6e2075f3df from 2020 added
a feature to maximize window when double clicking on the titlebar.
But unmaximizing is not supported so when double clicking again
on the window titlebar the window geometry was not reverted back.
2023-03-12 09:44:10 +00:00
David Maciejak 43edd37ee2 Update file headers year copyright
Update copyright year for Window Maker Team entries.
2023-03-12 09:44:10 +00:00
David Maciejak e95aea2e30 Workspace pager: display ? on non visited mini workspace
When the workspace pager is displayed it's showing grey mini workspaces
for non rendered/non visited workspaces. That patch is adding an exclamation
mark in the middle of the dummy grey background mini workspaces.
2023-03-11 11:38:25 +00:00
82 changed files with 9250 additions and 269 deletions
+2
View File
@@ -30,6 +30,8 @@ m4/ltversion.m4
m4/lt~obsolete.m4 m4/lt~obsolete.m4
src/wconfig.h src/wconfig.h
WINGs/WINGs/WINGsP.h
wrlib/wraster.h
# These files are generated by scripts # These files are generated by scripts
INSTALL-WMAKER INSTALL-WMAKER
+20
View File
@@ -3,6 +3,26 @@ NEWS for veteran Window Maker users
-- 0.96.0 -- 0.96.0
Hot Corners feature
--------------------------
Screen corners can be assigned an external command to be
executed when the mouse pointer is entering those areas.
In WPrefs, "Hot Corner Shortcut Preferences" can be used
for configuration or by manually adding a "HotCorners" key
and value to "YES" in the ~/GNUstep/Defaults/WindowMaker file.
Hot Corners feature is disabled by default.
Actions are specified by the "HotCornerActions" and are defined
as a four entries list ("top left action", "top right action",
"bottom left action", "bottom right action").
A screen corner area is a cube shape defined by the "HotCornerEdge"
which is a number of pixels from 2 (by default) to 10.
To lower the risk of triggering that feature accidentally a
"HotCornerDelay" key can be used which is the time before the action
is triggered while the pointer is in one of the screen corner.
Default value is 250 ms.
Screenshot capture feature Screenshot capture feature
-------------------------- --------------------------
+3 -3
View File
@@ -10,7 +10,7 @@ include_HEADERS = wtableview.h wtabledelegates.h
lib_LTLIBRARIES = libExtraWINGs.la lib_LTLIBRARIES = libExtraWINGs.la
noinst_PROGRAMS = test noinst_PROGRAMS = tableview
EXTRA_DIST = EXTRA_DIST =
@@ -25,6 +25,6 @@ AM_CPPFLAGS = -I$(top_srcdir)/wrlib -I$(top_srcdir)/WINGs \
LDADD= $(top_builddir)/WINGs/libWINGs.la $(top_builddir)/wrlib/libwraster.la \ LDADD= $(top_builddir)/WINGs/libWINGs.la $(top_builddir)/wrlib/libwraster.la \
$(top_builddir)/WINGs/libWUtil.la \ $(top_builddir)/WINGs/libWUtil.la \
@XFT_LIBS@ @INTLIBS@ @XFT_LIBS@ @INTLIBS@ @XLIBS@
test_LDADD = wtableview.o wtabledelegates.o $(LDADD) tableview_LDADD = wtableview.o wtabledelegates.o $(LDADD)
@@ -19,13 +19,18 @@ static char *options[] = {
int numberOfRows(WMTableViewDelegate * self, WMTableView * table) int numberOfRows(WMTableViewDelegate * self, WMTableView * table)
{ {
(void) self;
(void) table;
return 20; return 20;
} }
void *valueForCell(WMTableViewDelegate * self, WMTableColumn * column, int row) void *valueForCell(WMTableViewDelegate * self, WMTableColumn * column, int row)
{ {
(void) self;
/*WMTableView *table = (WMTableView*)WMGetTableColumnTableView(column); */ /*WMTableView *table = (WMTableView*)WMGetTableColumnTableView(column); */
int i; int i;
if (col1[0] == 0) { if (col1[0] == 0) {
for (i = 0; i < 20; i++) { for (i = 0; i < 20; i++) {
char buf[128]; char buf[128];
@@ -44,6 +49,8 @@ void *valueForCell(WMTableViewDelegate * self, WMTableColumn * column, int row)
void setValueForCell(WMTableViewDelegate * self, WMTableColumn * column, int row, void *data) void setValueForCell(WMTableViewDelegate * self, WMTableColumn * column, int row, void *data)
{ {
(void) self;
if ((uintptr_t)WMGetTableColumnId(column) == 1) if ((uintptr_t)WMGetTableColumnId(column) == 1)
col1[row] = data; col1[row] = data;
else else
@@ -59,6 +66,7 @@ static WMTableViewDelegate delegate = {
void clickedTable(WMWidget * w, void *self) void clickedTable(WMWidget * w, void *self)
{ {
(void) w;
int row = WMGetTableViewClickedRow((WMTableView *) self); int row = WMGetTableViewClickedRow((WMTableView *) self);
WMEditTableViewRow(self, row); WMEditTableViewRow(self, row);
+14 -8
View File
@@ -2,6 +2,8 @@
#include <WINGs/WINGsP.h> #include <WINGs/WINGsP.h>
#include <X11/cursorfont.h> #include <X11/cursorfont.h>
#include <stdint.h> #include <stdint.h>
#include <math.h>
#include <float.h>
#include "wtableview.h" #include "wtableview.h"
@@ -274,7 +276,7 @@ static void adjustScrollers(WMTableView * table)
prop = 1.0; prop = 1.0;
} else { } else {
oprop = WMGetScrollerKnobProportion(table->hscroll); oprop = WMGetScrollerKnobProportion(table->hscroll);
if (oprop == 0.0) if (fabs(oprop) <= DBL_EPSILON)
oprop = 1.0; oprop = 1.0;
ovalue = WMGetScrollerValue(table->hscroll); ovalue = WMGetScrollerValue(table->hscroll);
@@ -290,7 +292,7 @@ static void adjustScrollers(WMTableView * table)
prop = 1.0; prop = 1.0;
} else { } else {
oprop = WMGetScrollerKnobProportion(table->vscroll); oprop = WMGetScrollerKnobProportion(table->vscroll);
if (oprop == 0.0) if (fabs(oprop) <= DBL_EPSILON)
oprop = 1.0; oprop = 1.0;
ovalue = WMGetScrollerValue(table->vscroll); ovalue = WMGetScrollerValue(table->vscroll);
@@ -332,7 +334,7 @@ static void doScroll(WMWidget * self, void *data)
case WSIncrementWheel: case WSIncrementWheel:
case WSIncrementLine: case WSIncrementLine:
value += (float)table->rowHeight / size; value += (float)table->rowHeight / size;
if (value > 1.0) if (value > (float)1.0)
value = 1.0; value = 1.0;
WMSetScrollerParameters(self, value, WMGetScrollerKnobProportion(self)); WMSetScrollerParameters(self, value, WMGetScrollerKnobProportion(self));
repaintTable(table); repaintTable(table);
@@ -344,7 +346,7 @@ static void doScroll(WMWidget * self, void *data)
case WSDecrementPage: case WSDecrementPage:
value -= vpsize / size; value -= vpsize / size;
if (value < 0.0) if (value < (float)0.0)
value = 0.0; value = 0.0;
WMSetScrollerParameters(self, value, WMGetScrollerKnobProportion(self)); WMSetScrollerParameters(self, value, WMGetScrollerKnobProportion(self));
repaintTable(table); repaintTable(table);
@@ -352,7 +354,7 @@ static void doScroll(WMWidget * self, void *data)
case WSIncrementPage: case WSIncrementPage:
value += vpsize / size; value += vpsize / size;
if (value > 1.0) if (value > (float)1.0)
value = 1.0; value = 1.0;
WMSetScrollerParameters(self, value, WMGetScrollerKnobProportion(self)); WMSetScrollerParameters(self, value, WMGetScrollerKnobProportion(self));
repaintTable(table); repaintTable(table);
@@ -398,6 +400,7 @@ static void doScroll(WMWidget * self, void *data)
static void splitterHandler(XEvent * event, void *data) static void splitterHandler(XEvent * event, void *data)
{ {
(void) event;
WMTableColumn *column = (WMTableColumn *) data; WMTableColumn *column = (WMTableColumn *) data;
WMTableView *table = column->table; WMTableView *table = column->table;
int done = 0; int done = 0;
@@ -451,6 +454,8 @@ static void splitterHandler(XEvent * event, void *data)
static void realizeTable(void *data, WMNotification * notif) static void realizeTable(void *data, WMNotification * notif)
{ {
(void) notif;
repaintTable(data); repaintTable(data);
} }
@@ -790,7 +795,6 @@ void WMSetTableViewRowHeight(WMTableView * table, int height)
void WMScrollTableViewRowToVisible(WMTableView * table, int row) void WMScrollTableViewRowToVisible(WMTableView * table, int row)
{ {
WMScroller *scroller;
WMRange range; WMRange range;
WMRect rect; WMRect rect;
int newY, tmp; int newY, tmp;
@@ -798,7 +802,6 @@ void WMScrollTableViewRowToVisible(WMTableView * table, int row)
rect = getVisibleRect(table); rect = getVisibleRect(table);
range = rowsInRect(table, rect); range = rowsInRect(table, rect);
scroller = table->vscroll;
if (row < range.position) { if (row < range.position) {
newY = row * table->rowHeight - rect.size.height / 2; newY = row * table->rowHeight - rect.size.height / 2;
@@ -1157,6 +1160,8 @@ static void handleEvents(XEvent * event, void *data)
static void handleResize(W_ViewDelegate * self, WMView * view) static void handleResize(W_ViewDelegate * self, WMView * view)
{ {
(void) self;
reorganizeInterior(view->self); reorganizeInterior(view->self);
} }
@@ -1167,7 +1172,8 @@ static void reorganizeInterior(WMTableView * table)
WMSize size = getTotalSize(table); WMSize size = getTotalSize(table);
WMView *view = table->view; WMView *view = table->view;
int vw, vh; int vw, vh;
int hsThickness, vsThickness; int hsThickness = 0;
int vsThickness = 0;
if (table->vscroll) if (table->vscroll)
vsThickness = WMWidgetWidth(table->vscroll); vsThickness = WMWidgetWidth(table->vscroll);
+1 -1
View File
@@ -4,7 +4,7 @@ CATALOGS = @WINGSMOFILES@
CLEANFILES = $(CATALOGS) $(DOMAIN).pot CLEANFILES = $(CATALOGS) $(DOMAIN).pot
EXTRA_DIST = bg.po ca.po cs.po de.po fr.po fy.po hu.po nl.po sk.po EXTRA_DIST = bg.po ca.po cs.po de.po fr.po fy.po hu.po nl.po sk.po sr.po
# WUtil files: # WUtil files:
POTFILES = \ POTFILES = \
+1
View File
@@ -9,6 +9,7 @@ sk.po Slovak Jan 'judas' Tomka <judas@linux.sk>
bg.po Bulgarian Anton Zinoviev <zinoviev@debian.org> bg.po Bulgarian Anton Zinoviev <zinoviev@debian.org>
nl.po Dutch Alwin <translations@ziggo.nl> nl.po Dutch Alwin <translations@ziggo.nl>
fy.po Frisian Alwin <translations@ziggo.nl> fy.po Frisian Alwin <translations@ziggo.nl>
sr.po Serbian Strahinya Radich <contact@strahinja.org>
Notes Notes
----- -----
+1 -1
View File
@@ -1,5 +1,5 @@
# Translation into Western Frisian for Window Maker # Translation into Western Frisian for Window Maker
# Copyright (C) 2015-2016 Window Maker Developers Team # Copyright (C) 2015-2019 Window Maker Developers Team
# This file is distributed under the same license as the windowmaker package. # This file is distributed under the same license as the windowmaker package.
# Original by Alwin <translations@ziggo.nl>, 2015. # Original by Alwin <translations@ziggo.nl>, 2015.
# #
+1 -1
View File
@@ -1,5 +1,5 @@
# New translation into Dutch for Window Maker # New translation into Dutch for Window Maker
# Copyright (C) 2014-2015 Window Maker Developers Team # Copyright (C) 2014-2019 Window Maker Developers Team
# This file is distributed under the same license as the windowmaker package. # This file is distributed under the same license as the windowmaker package.
# Original by Alwin <translations@ziggo.nl>, 2014. # Original by Alwin <translations@ziggo.nl>, 2014.
# #
+806
View File
@@ -0,0 +1,806 @@
# Serbian messages for Window Maker
# Copyright (C) 1997-2006 Alfredo K. Kojima
# 1998-2006 Dan Pascu
# 2013-2020 Window Maker Developers Team
# This file is distributed under the same license as the Window Maker package.
# Strahinya Radich (Страхиња Радић) <contact@strahinja.org>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: WindowMaker 0.96.0\n"
"Report-Msgid-Bugs-To: wmaker-dev@googlegroups.com\n"
"POT-Creation-Date: 2023-11-02 19:36+0100\n"
"PO-Revision-Date: 2023-11-02 19:48+0100\n"
"Last-Translator: Страхиња Радић <contact@strahinja.org>\n"
"Language-Team: Serbian <sr@li.org>\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: poe 1.6.0-1-g10e6dcc\n"
#: ../../WINGs/error.c:106
msgid "fatal: "
msgstr "фатално: "
#: ../../WINGs/error.c:112
msgid "error: "
msgstr "грешка: "
#: ../../WINGs/error.c:118
msgid "warning: "
msgstr "упозорење: "
#: ../../WINGs/findfile.c:59
#, c-format
msgid "could not get password entry for UID %i"
msgstr "не може се добавити унос лозинке за UID %i"
#: ../../WINGs/findfile.c:89
#, c-format
msgid "could not get password entry for user %s"
msgstr "не може се добавити унос лозинке за корисника %s"
#: ../../WINGs/findfile.c:208
#, c-format
msgid "could not expand %s"
msgstr "не може се проширити %s"
#: ../../WINGs/findfile.c:437
#, c-format
msgid "Could not open input file \"%s\": %s"
msgstr "Не може се отворити улазна датотека „%s“: %s"
#: ../../WINGs/findfile.c:453
#, c-format
msgid "Could not create target file \"%s\": %s"
msgstr "Не може се креирати одредишна датотека „%s“: %s"
#: ../../WINGs/findfile.c:461
msgid "could not allocate memory for the copy buffer"
msgstr "не може се алоцирати меморија за бафер за копирање"
#: ../../WINGs/findfile.c:478
#, c-format
msgid "could not read from file \"%s\": %s"
msgstr "не може се прочитати датотека „%s“: %s"
#: ../../WINGs/findfile.c:493
#, c-format
msgid "could not write data to file \"%s\": %s"
msgstr "не могу се уписати подаци у датотеку „%s“: %s"
#: ../../WINGs/findfile.c:505
#, c-format
msgid "could not set permission 0%03o on file \"%s\": %s"
msgstr "не може се поставити дозвола 0%03o на датотеци „%s“: %s"
#: ../../WINGs/findfile.c:509
#, c-format
msgid "could not close the file \"%s\": %s"
msgstr "не може се затворити датотека „%s“: %s"
#: ../../WINGs/menuparser.c:110
#, c-format
msgid " included from file \"%s\" at line %d"
msgstr " укључена из датотеке „%s“ у реду %d"
#: ../../WINGs/menuparser.c:142
#, c-format
msgid "missing #endif to match #%s at line %d"
msgstr "недостаје #endif који би одговарао #%s у реду %d"
#: ../../WINGs/menuparser.c:200
msgid "multiple SHORTCUT definition not valid"
msgstr "вишеструка дефиниција SHORTCUT није исправна"
#: ../../WINGs/menuparser.c:253
msgid "premature end of file while expecting a new line after '\\'"
msgstr "прерани крај датотеке док се очекивао нови ред после „\\“"
#: ../../WINGs/menuparser.c:279
#, c-format
msgid "reached end of file while searching '*/' for comment started at line %d"
msgstr "достигнут крај датотеке приликом тражења „*/“ за коментар започет у реду %d"
#: ../../WINGs/menuparser.c:344
msgid "missing closing double-quote before end-of-line"
msgstr "недостаје завршни наводник пре краја реда"
#: ../../WINGs/menuparser.c:362
msgid "missing closing simple-quote before end-of-line"
msgstr "недостаје завршни апостроф пре краја реда"
#: ../../WINGs/menuparser.c:380
msgid "too many nested macro expansions, breaking loop"
msgstr "превише угњеждених проширења макроа, прекида се петља"
#: ../../WINGs/menuparser.c:439
#, c-format
msgid "unknown directive '#%s'"
msgstr "непозната директива „#%s“"
#: ../../WINGs/menuparser.c:444
#, c-format
msgid "extra text after '#' command is ignored: \"%.16s...\""
msgstr "сувишни текст после наредбе „#“ је игнорисан: „%.16s...“"
#: ../../WINGs/menuparser.c:459
msgid "no file name found for #include"
msgstr "назив датотеке у #include-у није пронађен"
#: ../../WINGs/menuparser.c:471
msgid "file name must be enclosed in brackets or double-quotes for #define"
msgstr "назив датотеке у #define-у мора бити окружен угластим заградама или наводницима"
#: ../../WINGs/menuparser.c:485
#, c-format
msgid "missing closing '%c' in filename specification"
msgstr "недостаје завршно „%c“ у задавању назива датотеке"
#: ../../WINGs/menuparser.c:503
msgid "too many nested #include's"
msgstr "превише угњеждених #include-ова"
#: ../../WINGs/menuparser.c:568
#, c-format
msgid "could not find file \"%s\" for #include"
msgstr "не може се наћи датотека „%s“ у #include-у"
#: ../../WINGs/menuparser.c:589
#, c-format
msgid "missing macro name argument to #%s"
msgstr "недостаје аргумент #%s - назив макроа"
#: ../../WINGs/menuparser.c:600
msgid "too many nested #if sequences"
msgstr "превише угњеждених секвенци #if"
#: ../../WINGs/menuparser.c:626 ../../WINGs/menuparser.c:643
#, c-format
msgid "found #%s but has no matching #if"
msgstr "пронађено #%s, али без одговарајућег #if"
#: ../../WINGs/menuparser_macros.c:166
msgid "no macro name found for #define"
msgstr "назив макроа за #define није пронађен"
#: ../../WINGs/menuparser_macros.c:188
#, c-format
msgid "premature end of file while reading arg-list for macro \"%s\""
msgstr "прерани крај датотеке приликом читања листе аргумената за макро „%s“"
#: ../../WINGs/menuparser_macros.c:195
#, c-format
msgid "too many parameters for macro \"%s\" definition"
msgstr "превише параметара за дефиницију макроа „%s“"
#: ../../WINGs/menuparser_macros.c:210
#, c-format
msgid "invalid character '%c' in arg-list for macro \"%s\" while expecting parameter name"
msgstr "неисправни знак „%c“ у листи аргумената за макро „%s“ док се очекивао назив параметра"
#: ../../WINGs/menuparser_macros.c:221
#, c-format
msgid "invalid character '%c' in arg-list for macro \"%s\" while expecting ',' or ')'"
msgstr "неисправни знак „%c“ у листи аргумената за макро „%s“ док се очекивало „,“ или „)“"
#: ../../WINGs/menuparser_macros.c:254
#, c-format
msgid "macro \"%s\" already defined, ignoring redefinition"
msgstr "макро „%s“ је већ дефинисан, игнорише се поновна дефиниција"
#: ../../WINGs/menuparser_macros.c:348
#, c-format
msgid "more content than supported for the macro \"%s\""
msgstr "више садржаја него што је подржано за макро „%s“"
#: ../../WINGs/menuparser_macros.c:459
#, c-format
msgid "expansion for macro \"%s\" too big, line truncated"
msgstr "проширење макроа „%s“ је превелико, ред је исечен"
#: ../../WINGs/menuparser_macros.c:471
#, c-format
msgid "macro \"%s\" needs parenthesis for arguments"
msgstr "макроу „%s“ су потребне заграде за аргументе"
#: ../../WINGs/menuparser_macros.c:502
msgid "missing closing quote or double-quote before end-of-line"
msgstr "недостаје завршни наводник или апостроф пре краја реда"
#: ../../WINGs/menuparser_macros.c:525
#, c-format
msgid "too many arguments for macro \"%s\", expected only %d"
msgstr "превише аргумената за макро „%s“, очекује се само %d"
#: ../../WINGs/menuparser_macros.c:534
#, c-format
msgid "premature end of line while searching for arguments to macro \"%s\""
msgstr "прерани крај реда приликом тражења аргумената за макро „%s“"
#: ../../WINGs/menuparser_macros.c:540
#, c-format
msgid "not enough arguments for macro \"%s\", expected %d but got only %d"
msgstr "недовољно аргумената за макро „%s“, очекује се %d, али само постоји %d"
#: ../../WINGs/menuparser_macros.c:545
#, c-format
msgid "too much data in parameter list of macro \"%s\", truncated"
msgstr "превише података у листи параметара макроа „%s“, исечено"
#: ../../WINGs/menuparser_macros.c:565
#, c-format
msgid "size of value for macro '%s' is too big, truncated"
msgstr "величина вредности макроа „%s“ је превелика, исечено"
#: ../../WINGs/menuparser_macros.c:646 ../../WINGs/menuparser_macros.c:672
#, c-format
msgid "could not determine %s"
msgstr "не може се одредити %s"
#: ../../WINGs/proplist.c:78
#, c-format
msgid "syntax error in %s %s, line %i: %s"
msgstr "синтаксна грешка у %s %s, ред %i: %s"
#: ../../WINGs/proplist.c:134
msgid "Only string or data is supported for a proplist dictionary key"
msgstr "Само ниска или подаци су подржани у proplist речничком кључу"
#: ../../WINGs/proplist.c:167 ../../WINGs/proplist.c:217
#: ../../WINGs/proplist.c:382 ../../WINGs/proplist.c:458
#: ../../WINGs/proplist.c:1048 ../../WINGs/proplist.c:1098
#: ../../WINGs/proplist.c:1246 ../../WINGs/proplist.c:1326
#: ../../WINGs/proplist.c:1431 ../../WINGs/proplist.c:1475
msgid "Used proplist functions on non-WMPropLists objects"
msgstr "Користе се proplist функције над не-WMPropLists објектима"
#: ../../WINGs/proplist.c:635
msgid "unterminated PropList string"
msgstr "незатворена PropList ниска"
#: ../../WINGs/proplist.c:673
msgid "unterminated PropList data"
msgstr "незатворен PropList податак"
#: ../../WINGs/proplist.c:681
msgid "unterminated PropList data (missing hexdigit)"
msgstr "незатворен PropList податак (недостаје хекс-цифра)"
#: ../../WINGs/proplist.c:693 ../../WINGs/proplist.c:698
msgid "non hexdigit character in PropList data"
msgstr "знак који није хекс-цифра у PropList подацима"
#: ../../WINGs/proplist.c:730
msgid "unterminated PropList array"
msgstr "незатворен PropList низ"
#: ../../WINGs/proplist.c:738
msgid "missing or unterminated PropList array"
msgstr "недостајући или незатворени PropList низ"
#: ../../WINGs/proplist.c:748
msgid "could not get PropList array element"
msgstr "не може се добавити елемент PropList низа"
#: ../../WINGs/proplist.c:775
msgid "unterminated PropList dictionary"
msgstr "незатворени PropList речник"
#: ../../WINGs/proplist.c:792
msgid "missing PropList dictionary key"
msgstr "недостајући кључ PropList речника"
#: ../../WINGs/proplist.c:794
msgid "missing PropList dictionary entry key or unterminated dictionary"
msgstr "недостаје кључ PropList речничке ставке или је речник незатворен"
#: ../../WINGs/proplist.c:802
msgid "error parsing PropList dictionary key"
msgstr "грешка приликом рашчлањивања кључа PropList речника"
#: ../../WINGs/proplist.c:810
msgid "missing = in PropList dictionary entry"
msgstr "недостаје = у ставци PropList речника"
#: ../../WINGs/proplist.c:818
msgid "error parsing PropList dictionary entry value"
msgstr "грешка приликом рашчлањивања вредности PropList речничког уноса"
#: ../../WINGs/proplist.c:826
msgid "missing ; in PropList dictionary entry"
msgstr "недостаје ; у речничком уносу PropList"
#: ../../WINGs/proplist.c:885
msgid "was expecting a string, data, array or dictionary. If it's a string, try enclosing it with \"."
msgstr "очекује се ниска, податак, низ или речник. Ако је у питању ниска, пробајте да је окружите са \"."
#: ../../WINGs/proplist.c:888
msgid "Comments are not allowed inside WindowMaker owned domain files."
msgstr "Коментари нису дозвољени унутар датотека домена WindowMaker-а."
#: ../../WINGs/proplist.c:1495 ../../WINGs/proplist.c:1560
#: ../../WINGs/proplist.c:1624
msgid "extra data after end of property list"
msgstr "вишак података после листе особина"
#: ../../WINGs/proplist.c:1535
#, c-format
msgid "could not get size for file '%s'"
msgstr "не може се одредити величина датотеке „%s“"
#: ../../WINGs/proplist.c:1543
#, c-format
msgid "error reading from file '%s'"
msgstr "грешка приликом читања датотеке „%s“"
#: ../../WINGs/proplist.c:1590
#, c-format
msgid "%s:could not open menu file"
msgstr "%s:не може се отворити датотека менија"
#: ../../WINGs/proplist.c:1672
#, c-format
msgid "mkstemp (%s) failed"
msgstr "mkstemp (%s) није успео"
#: ../../WINGs/proplist.c:1682
#, c-format
msgid "mktemp (%s) failed"
msgstr "mktemp (%s) није успео"
#: ../../WINGs/proplist.c:1689
#, c-format
msgid "open (%s) failed"
msgstr "open (%s) није успео"
#: ../../WINGs/proplist.c:1696
#, c-format
msgid "writing to file: %s failed"
msgstr "уписивање у датотеку: %s није успело"
#: ../../WINGs/proplist.c:1706
#, c-format
msgid "fclose (%s) failed"
msgstr "fclose (%s) није успео"
#: ../../WINGs/proplist.c:1714
#, c-format
msgid "rename ('%s' to '%s') failed"
msgstr "rename („%s“ у „%s“) није успео"
#: ../../WINGs/proplist.c:1785
#, c-format
msgid "Could not create component %s"
msgstr "Не може се креирати компонента %s"
#: ../../WINGs/userdefaults.c:68
msgid "variable WMAKER_USER_ROOT defined with invalid path, not used"
msgstr "променљива WMAKER_USER_ROOT је задата са неисправном путањом, не користи се"
#. something happened with the file. just overwrite it
#: ../../WINGs/userdefaults.c:208 ../../WINGs/userdefaults.c:223
#, c-format
msgid "cannot read domain from file '%s' when syncing"
msgstr "не може се учитати домен из датотеке „%s“ приликом синхронизовања"
#: ../../WINGs/dragcommon.c:60
#, c-format
msgid "unknown XDND action %s"
msgstr "непозната XDND акција %s"
#: ../../WINGs/dragcommon.c:142
#, c-format
msgid "target %lu for XDND message no longer exists"
msgstr "одредиште %lu XDND поруке више не постоји"
#: ../../WINGs/dragcommon.c:220
#, c-format
msgid "unsupported version %i for XDND enter message"
msgstr "неподржана верзија %i XDND улазне поруке"
#: ../../WINGs/dragsource.c:163
msgid "XDND selection lost during drag operation..."
msgstr "XDND избор је изгубљен приликом операције превлачења..."
#: ../../WINGs/dragsource.c:758
msgid "could not get XDND version for target of drop"
msgstr "не може се одредити верзија XDND-а за одредиште превлачења"
#: ../../WINGs/dragsource.c:774
msgid "could not get ownership of XDND selection"
msgstr "не може се одредити власништво над XDND избором"
#: ../../WINGs/dragsource.c:1070
msgid "delay for drag destination response expired"
msgstr "пауза за одговор одредишта превлачења је истекла"
#: ../../WINGs/wcolor.c:204 ../../WINGs/wcolor.c:214 ../../WINGs/wcolor.c:250
#: ../../WINGs/wcolor.c:288
#, c-format
msgid "could not allocate %s color"
msgstr "не може се алоцирати боја %s"
#: ../../WINGs/wcolor.c:204
msgid "white"
msgstr "бела"
#: ../../WINGs/wcolor.c:214
msgid "black"
msgstr "црна"
#: ../../WINGs/wcolor.c:250
msgid "gray"
msgstr "сива"
#: ../../WINGs/wcolor.c:288
msgid "dark gray"
msgstr "тамно сива"
#: ../../WINGs/wcolorpanel.c:390
msgid "Colors"
msgstr "Боје"
#: ../../WINGs/wcolorpanel.c:565 ../../WINGs/wcolorpanel.c:2716
msgid "Brightness"
msgstr "Светлина"
#: ../../WINGs/wcolorpanel.c:567 ../../WINGs/wcolorpanel.c:641
#: ../../WINGs/wcolorpanel.c:672 ../../WINGs/wcolorpanel.c:703
#: ../../WINGs/wcolorpanel.c:778 ../../WINGs/wcolorpanel.c:809
#: ../../WINGs/wcolorpanel.c:841 ../../WINGs/wcolorpanel.c:874
#: ../../WINGs/wcolorpanel.c:2010 ../../WINGs/wcolorpanel.c:2718
#: ../../WINGs/wcolorpanel.c:2752 ../../WINGs/wcolorpanel.c:2786
msgid "Color Panel: Could not allocate memory"
msgstr "Панел за боје: Неуспешно алоцирање меморије"
#: ../../WINGs/wcolorpanel.c:639
msgid "Red"
msgstr "Црвена"
#: ../../WINGs/wcolorpanel.c:670
msgid "Green"
msgstr "Зелена"
#: ../../WINGs/wcolorpanel.c:701
msgid "Blue"
msgstr "Плава"
#: ../../WINGs/wcolorpanel.c:715
msgid "Decimal"
msgstr "Децимално"
#: ../../WINGs/wcolorpanel.c:723
msgid "Hexadecimal"
msgstr "Хексадекадно"
#: ../../WINGs/wcolorpanel.c:776
msgid "Cyan"
msgstr "Цијан"
#: ../../WINGs/wcolorpanel.c:807
msgid "Magenta"
msgstr "Магента"
#: ../../WINGs/wcolorpanel.c:839
msgid "Yellow"
msgstr "Жута"
#: ../../WINGs/wcolorpanel.c:872
msgid "Black"
msgstr "Црна"
#: ../../WINGs/wcolorpanel.c:947
msgid "Spectrum"
msgstr "Спектар"
#: ../../WINGs/wcolorpanel.c:973
msgid "Palette"
msgstr "Палета"
#: ../../WINGs/wcolorpanel.c:978
msgid "New from File..."
msgstr "Нова из датотеке..."
#: ../../WINGs/wcolorpanel.c:979 ../../WINGs/wcolorpanel.c:1024
#: ../../WINGs/wcolorpanel.c:1039
msgid "Rename..."
msgstr "Преименуј..."
#: ../../WINGs/wcolorpanel.c:980 ../../WINGs/wcolorpanel.c:1025
#: ../../WINGs/wcolorpanel.c:1040 ../../WINGs/wcolorpanel.c:3176
msgid "Remove"
msgstr "Уклони"
#: ../../WINGs/wcolorpanel.c:981
msgid "Copy"
msgstr "Копирај"
#: ../../WINGs/wcolorpanel.c:982
msgid "New from Clipboard"
msgstr "Нова из клипборда"
#: ../../WINGs/wcolorpanel.c:1001
msgid "X11-Colors"
msgstr "X11 боје"
#: ../../WINGs/wcolorpanel.c:1018
msgid "Color"
msgstr "Боја"
#: ../../WINGs/wcolorpanel.c:1023
msgid "Add..."
msgstr "Додај..."
#: ../../WINGs/wcolorpanel.c:1033
msgid "List"
msgstr "Листа"
#: ../../WINGs/wcolorpanel.c:1038
msgid "New..."
msgstr "Нова..."
#: ../../WINGs/wcolorpanel.c:1165
#, c-format
msgid "Color Panel: Could not create directory %s needed to store configurations"
msgstr "Панел за боје: Не може се креирати директоријум %s неопходан за чување подешавања"
#. Delete the file, it doesn't belong here
#: ../../WINGs/wcolorpanel.c:1171 ../../WINGs/wcolorpanel.c:3069
#: ../../WINGs/wcolorpanel.c:3073
msgid "File Error"
msgstr "Грешка датотеке"
#: ../../WINGs/wcolorpanel.c:1172
msgid "Could not create ColorPanel configuration directory"
msgstr "Не може се креирати директоријум са подешавањима ColorPanel"
#: ../../WINGs/wcolorpanel.c:1173 ../../WINGs/wcolorpanel.c:3070
#: ../../WINGs/wcolorpanel.c:3075 ../../WINGs/wcolorpanel.c:3100
#: ../../WINGs/wfilepanel.c:227 ../../WINGs/wfilepanel.c:596
#: ../../WINGs/wfilepanel.c:611 ../../WINGs/wfilepanel.c:715
#: ../../WINGs/wfilepanel.c:883 ../../WINGs/wfontpanel.c:532
msgid "OK"
msgstr "ОК"
#: ../../WINGs/wcolorpanel.c:1178
msgid "Color Panel: Could not find file"
msgstr "Панел за боје: Не може се пронаћи датотека"
#: ../../WINGs/wcolorpanel.c:1374 ../../WINGs/wcolorpanel.c:1435
#: ../../WINGs/wcolorpanel.c:1495
msgid "Color Panel: X failed request"
msgstr "Панел за боје: Неуспешан захтев X-а"
#: ../../WINGs/wcolorpanel.c:2750
msgid "Saturation"
msgstr "Засићење"
#: ../../WINGs/wcolorpanel.c:2784
msgid "Hue"
msgstr "Нијанса"
#: ../../WINGs/wcolorpanel.c:3008
msgid "Open Palette"
msgstr "Отвори палету"
#: ../../WINGs/wcolorpanel.c:3070
msgid "Invalid file format !"
msgstr "Неисправан формат датотеке !"
#: ../../WINGs/wcolorpanel.c:3072
#, c-format
msgid "can't remove file %s"
msgstr "не може се уклонити датотека %s"
#: ../../WINGs/wcolorpanel.c:3074
msgid "Couldn't remove file from Configuration Directory !"
msgstr "Не може се уклонити датотека из директоријума са подешавањима !"
#: ../../WINGs/wcolorpanel.c:3099
msgid "Rename"
msgstr "Преименовање"
#: ../../WINGs/wcolorpanel.c:3099
msgid "Rename palette to:"
msgstr "Преименуј палету у:"
#: ../../WINGs/wcolorpanel.c:3100 ../../WINGs/wfilepanel.c:236
#: ../../WINGs/wfilepanel.c:611 ../../WINGs/wfilepanel.c:715
msgid "Cancel"
msgstr "Поништи"
#. Careful, this palette exists already
#: ../../WINGs/wcolorpanel.c:3116 ../../WINGs/wfilepanel.c:715
msgid "Warning"
msgstr "Упозорење"
#: ../../WINGs/wcolorpanel.c:3117
msgid "Palette already exists !\n\nOverwrite ?"
msgstr "Палета већ постоји !\n\nПреписати ?"
#: ../../WINGs/wcolorpanel.c:3117 ../../WINGs/wcolorpanel.c:3176
msgid "No"
msgstr "Не"
#: ../../WINGs/wcolorpanel.c:3117 ../../WINGs/wcolorpanel.c:3176
msgid "Yes"
msgstr "Да"
#: ../../WINGs/wcolorpanel.c:3148
#, c-format
msgid "Couldn't rename palette %s to %s"
msgstr "Палета %s се не може преименовати у %s"
#: ../../WINGs/wcolorpanel.c:3171
msgid "This will permanently remove the palette "
msgstr "Ово ће трајно уклонити палету "
#: ../../WINGs/wcolorpanel.c:3173
msgid ".\n\nAre you sure you want to remove this palette ?"
msgstr ".\n\nДа ли сте сигурни да желите да уклоните палету ?"
#: ../../WINGs/wcolorpanel.c:3195
#, c-format
msgid "Couldn't remove palette %s"
msgstr "Не може се уклонити палета %s"
#: ../../WINGs/wcolorpanel.c:3498
msgid "Color Panel: Color unspecified"
msgstr "Панел за боју: Боја није задата"
#: ../../WINGs/wfilepanel.c:216
msgid "Name:"
msgstr "Назив:"
#: ../../WINGs/wfilepanel.c:306 ../../WINGs/wfilepanel.c:364
msgid "Open"
msgstr "Отвори"
#: ../../WINGs/wfilepanel.c:322 ../../WINGs/wfilepanel.c:370
msgid "Save"
msgstr "Сачувај"
#: ../../WINGs/wfilepanel.c:506
#, c-format
msgid "WINGs: could not open directory %s\n"
msgstr "WINGs: не може се отворити директоријум %s\n"
#: ../../WINGs/wfilepanel.c:526
#, c-format
msgid "WINGs: could not stat %s\n"
msgstr "WINGs: не може се stat-овати %s\n"
#: ../../WINGs/wfilepanel.c:596 ../../WINGs/wfilepanel.c:883
#: ../../WINGs/wfontpanel.c:531
msgid "Error"
msgstr "Грешка"
#: ../../WINGs/wfilepanel.c:610
msgid "Create Directory"
msgstr "Креирање директоријума"
#: ../../WINGs/wfilepanel.c:611
msgid "Enter directory name"
msgstr "Унесите назив директоријума"
#: ../../WINGs/wfilepanel.c:639
#, c-format
msgid "Can not create %s: %s"
msgstr "Не може се креирати %s: %s"
#: ../../WINGs/wfilepanel.c:705
#, c-format
msgid "Can not find %s: %s"
msgstr "Не може се наћи %s: %s"
#: ../../WINGs/wfilepanel.c:711
#, c-format
msgid "Delete %s %s?"
msgstr "Обрисати %s %s?"
#: ../../WINGs/wfilepanel.c:712
msgid "directory"
msgstr "директоријум"
#: ../../WINGs/wfilepanel.c:712
msgid "file"
msgstr "датотеку"
#: ../../WINGs/wfilepanel.c:719
#, c-format
msgid "Removing %s failed: %s"
msgstr "Уклањање %s није успело: %s"
#: ../../WINGs/wfilepanel.c:751
#, c-format
msgid "An error occurred browsing '%s'."
msgstr "Догодила се грешка приликом прегледања „%s“."
#: ../../WINGs/wfilepanel.c:754
#, c-format
msgid "'%s' is not a directory."
msgstr "„%s“ није директоријум."
#: ../../WINGs/wfilepanel.c:883
msgid "File does not exist."
msgstr "Датотека не постоји."
#: ../../WINGs/wfont.c:43
#, c-format
msgid "invalid font: %s. Trying '%s'"
msgstr "неисправан фонт: %s. Проба се „%s“"
#: ../../WINGs/wfont.c:270 ../../WINGs/wfont.c:288
#, c-format
msgid "could not load font: %s."
msgstr "не може се учитати фонт: %s."
#. WMSetWidgetBackgroundColor(panel->win, WMWhiteColor(scr));
#: ../../WINGs/wfontpanel.c:184
msgid "Font Panel"
msgstr "Панел за фонт"
#: ../../WINGs/wfontpanel.c:220
msgid "The quick brown fox jumps over the lazy dog"
msgstr "Одбациће кавгаџија плаштом чађ у жељезни фењер"
#: ../../WINGs/wfontpanel.c:226
msgid "Family"
msgstr "Фамилија"
#: ../../WINGs/wfontpanel.c:237
msgid "Typeface"
msgstr "Словни лик"
#: ../../WINGs/wfontpanel.c:248
msgid "Size"
msgstr "Величина"
#: ../../WINGs/wfontpanel.c:267
msgid "Set"
msgstr "Постави"
#: ../../WINGs/wfontpanel.c:273
msgid "Revert"
msgstr "Врати"
#: ../../WINGs/wfontpanel.c:532
msgid "Could not init font config library\n"
msgstr "Не може се иницијализовати библиотека font config\n"
#: ../../WINGs/widgets.c:447
#, c-format
msgid "WINGs: could not load widget images file: %s"
msgstr "WINGs: не може се учитати датотека са сликама виџета: %s"
#: ../../WINGs/widgets.c:543
#, c-format
msgid "WINGs: could not open display %s"
msgstr "WINGs: не може се отворити приказ %s"
#: ../../WINGs/widgets.c:772
msgid "could not load any fonts. Make sure your font installation and locale settings are correct."
msgstr "не може се учитати ниједан фонт. Проверите да ли су фонтови исправно инсталирани и да али су подешавања језика исправна."
#: ../../WINGs/winputmethod.c:65
msgid "could not add destroy callback for XIM input method"
msgstr "не може се додати destroy callback за XIM метод уноса"
#: ../../WINGs/wruler.c:175
msgid "0 inches"
msgstr "0 инча"
#: ../../WINGs/wtextfield.c:494
msgid "only left alignment is supported in textfields"
msgstr "у текстуалним пољима је подржано само лево уравнање"
#: ../../WINGs/wwindow.c:160
msgid "window title conversion error... using STRING encoding"
msgstr "грешка приликом конверзије наслова прозора... користи се STRING кодирање"
#: ../../WINGs/wwindow.c:181
msgid "icon title conversion error... using STRING encoding"
msgstr "грешка приликом конверзије наслова иконе... користи се STRING кодирање"
+9 -21
View File
@@ -1732,36 +1732,23 @@ Bool WMWritePropListToFile(WMPropList * plist, const char *path)
* file, and the last component is stripped off. the rest is the * file, and the last component is stripped off. the rest is the
* the hierarchy to be created. * the hierarchy to be created.
* *
* refuses to create anything outside $WMAKER_USER_ROOT/Defaults or $WMAKER_USER_ROOT/Library * refuses to create anything outside $WMAKER_USER_ROOT
* *
* returns 1 on success, 0 on failure * returns 1 on success, 0 on failure
*/ */
int wmkdirhier(const char *path) int wmkdirhier(const char *path)
{ {
const char *libpath; const char *t;
char *udefpath;
int cmp;
char *thePath = NULL, buf[1024]; char *thePath = NULL, buf[1024];
size_t p, plen; size_t p, plen;
struct stat st; struct stat st;
/* Only create directories under $WMAKER_USER_ROOT/Defaults or $WMAKER_USER_ROOT/Library */ /* Only create directories under $WMAKER_USER_ROOT */
libpath = wuserdatapath(); if ((t = wusergnusteppath()) == NULL)
if (strncmp(path, libpath, strlen(libpath)) == 0) return 0;
if (path[strlen(libpath)] == '/') if (strncmp(path, t, strlen(t)) != 0)
goto path_in_valid_tree; return 0;
udefpath = wdefaultspathfordomain("");
cmp = strncmp(path, udefpath, strlen(udefpath));
wfree(udefpath);
if (cmp == 0)
/* Note: by side effect, 'udefpath' already contains a final '/' */
goto path_in_valid_tree;
/* If we reach this point, the path is outside the allowed tree */
return 0;
path_in_valid_tree:
thePath = wstrdup(path); thePath = wstrdup(path);
/* Strip the trailing component if it is a file */ /* Strip the trailing component if it is a file */
p = strlen(thePath); p = strlen(thePath);
@@ -1784,6 +1771,7 @@ int wmkdirhier(const char *path)
} }
memset(buf, 0, sizeof(buf)); memset(buf, 0, sizeof(buf));
strncpy(buf, t, sizeof(buf) - 1);
p = strlen(buf); p = strlen(buf);
plen = strlen(thePath); plen = strlen(thePath);
@@ -1794,7 +1782,7 @@ int wmkdirhier(const char *path)
strncpy(buf, thePath, p); strncpy(buf, thePath, p);
if (mkdir(buf, 0777) == -1 && errno == EEXIST && if (mkdir(buf, 0777) == -1 && errno == EEXIST &&
stat(buf, &st) == 0 && !S_ISDIR(st.st_mode)) { stat(buf, &st) == 0 && !S_ISDIR(st.st_mode)) {
werror(_("Could not create path component %s"), buf); werror(_("Could not create component %s"), buf);
wfree(thePath); wfree(thePath);
return 0; return 0;
} }
+5 -4
View File
@@ -2,8 +2,9 @@
* *
* WPrefs - Window Maker Preferences Program * WPrefs - Window Maker Preferences Program
* *
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2023 Window Maker Team
* Copyright (c) 1998-2003 Alfredo K. Kojima * Copyright (c) 1998-2003 Alfredo K. Kojima
* Copyright (c) 2009-2023 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -88,7 +89,7 @@ static struct expert_option {
/* default: */ False, OPTION_WMAKER, "KbdModeLock" }, /* default: */ False, OPTION_WMAKER, "KbdModeLock" },
#endif /* XKB_MODELOCK */ #endif /* XKB_MODELOCK */
{ N_("Maximize (snap) a window to edge or corner by dragging."), { N_("Snap a window to edge or corner by dragging."),
/* default: */ False, OPTION_WMAKER, "WindowSnapping" }, /* default: */ False, OPTION_WMAKER, "WindowSnapping" },
{ N_("Distance from edge to begin window snap."), { N_("Distance from edge to begin window snap."),
@@ -97,7 +98,7 @@ static struct expert_option {
{ N_("Distance from corner to begin window snap."), { N_("Distance from corner to begin window snap."),
/* default: */ 10, OPTION_WMAKER_INT, "SnapCornerDetect" }, /* default: */ 10, OPTION_WMAKER_INT, "SnapCornerDetect" },
{ N_("Snapping a window to the top maximizes it to the full screen."), { N_("Snap a window to the top to maximize it to the full screen."),
/* default: */ False, OPTION_WMAKER, "SnapToTopMaximizesFullscreen" }, /* default: */ False, OPTION_WMAKER, "SnapToTopMaximizesFullscreen" },
{ N_("Allow move half-maximized windows between multiple screens."), { N_("Allow move half-maximized windows between multiple screens."),
@@ -115,7 +116,7 @@ static struct expert_option {
{ N_("Wrap dock-attached icons around the screen edges."), { N_("Wrap dock-attached icons around the screen edges."),
/* default: */ True, OPTION_WMAKER, "WrapAppiconsInDock" }, /* default: */ True, OPTION_WMAKER, "WrapAppiconsInDock" },
{ N_("Double click on titlebar maximize a window to full screen."), { N_("Double click on titlebar maximizes/minimizes a window to/from full screen."),
/* default: */ False, OPTION_WMAKER, "DbClickFullScreen" }, /* default: */ False, OPTION_WMAKER, "DbClickFullScreen" },
{ N_("Close rootmenu when mouse (left or right) is clicked outside focus."), { N_("Close rootmenu when mouse (left or right) is clicked outside focus."),
+465
View File
@@ -0,0 +1,465 @@
/* HotCornerShortcuts.c - screen corners actions
*
* WPrefs - Window Maker Preferences Program
*
* Copyright (c) 2023 Window Maker Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "WPrefs.h"
typedef struct _Panel {
WMBox *box;
char *sectionName;
char *description;
CallbackRec callbacks;
WMWidget *parent;
WMPixmap *icon;
Pixmap quarter[4];
WMFrame *hcF;
WMButton *hcB;
WMFrame *hceF;
WMSlider *hceS;
WMLabel *hceL;
WMFrame *hcdescF;
WMLabel *hcdescL;
WMFrame *hcdelayF;
WMButton *hcdelayB[5];
WMTextField *hcdelayT;
WMLabel *hcdelayL;
WMLabel *icornerL;
WMFrame *hcactionsF;
WMTextField *hcactionsT[4];
char hotcornerDelaySelected;
} _Panel;
#define ICON_FILE "hotcorners"
#define DELAY_ICON "timer%i"
#define DELAY_ICON_S "timer%is"
static void edgeCallback(WMWidget * w, void *data)
{
_Panel *panel = (_Panel *) data;
char buffer[64];
int i;
/* Parameter not used, but tell the compiler that it is ok */
(void) w;
i = WMGetSliderValue(panel->hceS);
if (i == 0)
sprintf(buffer, _("OFF"));
else if (i == 1)
sprintf(buffer, _("1 pixel"));
else if (i <= 4)
/* 2-4 */
sprintf(buffer, _("%i pixels"), i);
else
/* >4 */
sprintf(buffer, _("%i pixels "), i); /* note space! */
WMSetLabelText(panel->hceL, buffer);
}
static void showData(_Panel * panel)
{
int i;
char buffer[32];
WMPropList *array;
if (!GetObjectForKey("HotCornerDelay"))
i = 250;
else
i = GetIntegerForKey("HotCornerDelay");
sprintf(buffer, "%i", i);
WMSetTextFieldText(panel->hcdelayT, buffer);
switch (i) {
case 0:
WMPerformButtonClick(panel->hcdelayB[0]);
break;
case 250:
WMPerformButtonClick(panel->hcdelayB[1]);
break;
case 500:
WMPerformButtonClick(panel->hcdelayB[2]);
break;
case 750:
WMPerformButtonClick(panel->hcdelayB[3]);
break;
case 1000:
WMPerformButtonClick(panel->hcdelayB[4]);
break;
}
i = GetIntegerForKey("HotCornerEdge");
i = i < 0 ? 2 : i;
i = i > 10 ? 10 : i;
WMSetSliderValue(panel->hceS, i);
edgeCallback(NULL, panel);
WMSetButtonSelected(panel->hcB, GetBoolForKey("HotCorners"));
array = GetObjectForKey("HotCornerActions");
if (array && (!WMIsPLArray(array) || WMGetPropListItemCount(array) != sizeof(panel->hcactionsT) / sizeof(WMTextField *))) {
wwarning(_("invalid data in option HotCornerActions."));
} else {
if (array) {
for (i = 0; i < sizeof(panel->hcactionsT) / sizeof(WMTextField *); i++)
if (strcasecmp(WMGetFromPLString(WMGetFromPLArray(array, i)), "None") != 0)
WMSetTextFieldText(panel->hcactionsT[i], WMGetFromPLString(WMGetFromPLArray(array, i)));
}
}
}
static void storeData(_Panel * panel)
{
WMPropList *list;
WMPropList *tmp;
char *str;
int i;
SetBoolForKey(WMGetButtonSelected(panel->hcB), "HotCorners");
str = WMGetTextFieldText(panel->hcdelayT);
if (sscanf(str, "%i", &i) != 1)
i = 0;
SetIntegerForKey(i, "HotCornerDelay");
free(str);
SetIntegerForKey(WMGetSliderValue(panel->hceS), "HotCornerEdge");
list = WMCreatePLArray(NULL, NULL);
for (i = 0; i < sizeof(panel->hcactionsT) / sizeof(WMTextField *); i++) {
str = WMGetTextFieldText(panel->hcactionsT[i]);
if (strlen(str) == 0)
str = "None";
tmp = WMCreatePLString(str);
WMAddToPLArray(list, tmp);
}
SetObjectForKey(list, "HotCornerActions");
}
static void pushDelayButton(WMWidget * w, void *data)
{
_Panel *panel = (_Panel *) data;
panel->hotcornerDelaySelected = 1;
if (w == panel->hcdelayB[0]) {
WMSetTextFieldText(panel->hcdelayT, "0");
} else if (w == panel->hcdelayB[1]) {
WMSetTextFieldText(panel->hcdelayT, "250");
} else if (w == panel->hcdelayB[2]) {
WMSetTextFieldText(panel->hcdelayT, "500");
} else if (w == panel->hcdelayB[3]) {
WMSetTextFieldText(panel->hcdelayT, "700");
} else if (w == panel->hcdelayB[4]) {
WMSetTextFieldText(panel->hcdelayT, "1000");
}
}
static void delayTextChanged(void *observerData, WMNotification * notification)
{
_Panel *panel = (_Panel *) observerData;
int i;
/* Parameter not used, but tell the compiler that it is ok */
(void) notification;
if (panel->hotcornerDelaySelected) {
for (i = 0; i < 5; i++) {
WMSetButtonSelected(panel->hcdelayB[i], False);
}
panel->hotcornerDelaySelected = 0;
}
}
static void createPanel(Panel * p)
{
_Panel *panel = (_Panel *) p;
int i;
char *buf1, *buf2;
WMColor *color;
WMFont *font;
char *path;
RImage *xis = NULL;
WMScreen *scr = WMWidgetScreen(panel->parent);
RContext *rc = WMScreenRContext(scr);
GC gc = XCreateGC(scr->display, WMWidgetXID(panel->parent), 0, NULL);
path = LocateImage(ICON_FILE);
if (path) {
xis = RLoadImage(rc, path, 0);
if (!xis) {
wwarning(_("could not load image file %s"), path);
}
wfree(path);
}
panel->box = WMCreateBox(panel->parent);
WMSetViewExpandsToParent(WMWidgetView(panel->box), 2, 2, 2, 2);
/***************** Hot Corner lelf side frames *****************/
panel->hcF = WMCreateFrame(panel->box);
WMResizeWidget(panel->hcF, 240, 53);
WMMoveWidget(panel->hcF, 15, 17);
panel->hcB = WMCreateSwitchButton(panel->hcF);
WMResizeWidget(panel->hcB, 150, 30);
WMMoveWidget(panel->hcB, 15, 12);
WMSetButtonText(panel->hcB, _("Enable Hot Corners"));
WMMapSubwidgets(panel->hcF);
panel->hceF = WMCreateFrame(panel->box);
WMSetFrameTitle(panel->hceF, _("Hot Corner Edge"));
WMResizeWidget(panel->hceF, 240, 40);
WMMoveWidget(panel->hceF, 15, 77);
panel->hceS = WMCreateSlider(panel->hceF);
WMResizeWidget(panel->hceS, 80, 15);
WMMoveWidget(panel->hceS, 15, 18);
WMSetSliderMinValue(panel->hceS, 2);
WMSetSliderMaxValue(panel->hceS, 10);
WMSetSliderAction(panel->hceS, edgeCallback, panel);
panel->hceL = WMCreateLabel(panel->hceF);
WMResizeWidget(panel->hceL, 100, 15);
WMMoveWidget(panel->hceL, 105, 18);
WMMapSubwidgets(panel->hceF);
panel->hcdescF = WMCreateFrame(panel->box);
WMResizeWidget(panel->hcdescF, 240, 95);
WMMoveWidget(panel->hcdescF, 15, 130);
panel->hcdescL = WMCreateLabel(panel->hcdescF);
WMResizeWidget(panel->hcdescL, 200, 60);
WMMoveWidget(panel->hcdescL, 15, 10);
WMSetLabelText(panel->hcdescL,
_("Instructions:\n\n"
" - assign command to corner\n"
" - or leave it empty\n"));
WMMapSubwidgets(panel->hcdescF);
/***************** Hot Corner Action Delay *****************/
panel->hcdelayF = WMCreateFrame(panel->box);
WMResizeWidget(panel->hcdelayF, 245, 60);
WMMoveWidget(panel->hcdelayF, 265, 10);
WMSetFrameTitle(panel->hcdelayF, _("Hot Corner Delay"));
buf1 = wmalloc(strlen(DELAY_ICON) + 1);
buf2 = wmalloc(strlen(DELAY_ICON_S) + 1);
for (i = 0; i < 5; i++) {
char *path;
panel->hcdelayB[i] = WMCreateCustomButton(panel->hcdelayF, WBBStateChangeMask);
WMResizeWidget(panel->hcdelayB[i], 25, 25);
WMMoveWidget(panel->hcdelayB[i], 12 + (30 * i), 25);
WMSetButtonBordered(panel->hcdelayB[i], False);
WMSetButtonImagePosition(panel->hcdelayB[i], WIPImageOnly);
WMSetButtonAction(panel->hcdelayB[i], pushDelayButton, panel);
if (i > 0)
WMGroupButtons(panel->hcdelayB[0], panel->hcdelayB[i]);
sprintf(buf1, DELAY_ICON, i);
sprintf(buf2, DELAY_ICON_S, i);
path = LocateImage(buf1);
if (path) {
panel->icon = WMCreatePixmapFromFile(scr, path);
if (panel->icon) {
WMSetButtonImage(panel->hcdelayB[i], panel->icon);
WMReleasePixmap(panel->icon);
} else {
wwarning(_("could not load icon file %s"), path);
}
wfree(path);
}
path = LocateImage(buf2);
if (path) {
panel->icon = WMCreatePixmapFromFile(scr, path);
if (panel->icon) {
WMSetButtonAltImage(panel->hcdelayB[i], panel->icon);
WMReleasePixmap(panel->icon);
} else {
wwarning(_("could not load icon file %s"), path);
}
wfree(path);
}
}
wfree(buf1);
wfree(buf2);
panel->hcdelayT = WMCreateTextField(panel->hcdelayF);
WMResizeWidget(panel->hcdelayT, 36, 20);
WMMoveWidget(panel->hcdelayT, 165, 28);
WMAddNotificationObserver(delayTextChanged, panel, WMTextDidChangeNotification, panel->hcdelayT);
panel->hcdelayL = WMCreateLabel(panel->hcdelayF);
WMResizeWidget(panel->hcdelayL, 36, 16);
WMMoveWidget(panel->hcdelayL, 205, 32);
WMSetLabelText(panel->hcdelayL, _("ms"));
color = WMDarkGrayColor(scr);
font = WMSystemFontOfSize(scr, 10);
WMSetLabelTextColor(panel->hcdelayL, color);
WMSetLabelFont(panel->hcdelayL, font);
WMReleaseColor(color);
WMReleaseFont(font);
WMMapSubwidgets(panel->hcdelayF);
/***************** Set Hot Corner Actions ****************/
panel->hcactionsF = WMCreateFrame(panel->box);
WMSetFrameTitle(panel->hcactionsF, _("Hot Corner Actions"));
WMResizeWidget(panel->hcactionsF, 245, 148);
WMMoveWidget(panel->hcactionsF, 265, 77);
panel->icornerL = WMCreateLabel(panel->hcactionsF);
WMResizeWidget(panel->icornerL, 24, 24);
WMMoveWidget(panel->icornerL, 10, 18);
WMSetLabelImagePosition(panel->icornerL, WIPImageOnly);
CreateImages(scr, rc, xis, ICON_FILE, &panel->icon, NULL);
if (panel->icon)
{
WMPixmap *nicon;
panel->quarter[0] = XCreatePixmap(scr->display, WMWidgetXID(panel->parent), panel->icon->width/2, panel->icon->height/2, WMScreenDepth(scr));
XCopyArea(scr->display, WMGetPixmapXID(panel->icon), panel->quarter[0], gc, 0, 0, panel->icon->width/2, panel->icon->height/2, 0, 0);
nicon = WMCreatePixmapFromXPixmaps(scr, panel->quarter[0], WMGetPixmapMaskXID(panel->icon),
panel->icon->width/2, panel->icon->height/2, WMScreenDepth(scr));
WMSetLabelImage(panel->icornerL, nicon);
WMReleasePixmap(nicon);
}
panel->hcactionsT[0] = WMCreateTextField(panel->hcactionsF);
WMResizeWidget(panel->hcactionsT[0], 180, 20);
WMMoveWidget(panel->hcactionsT[0], 50, 20);
panel->icornerL = WMCreateLabel(panel->hcactionsF);
WMResizeWidget(panel->icornerL, 24, 24);
WMMoveWidget(panel->icornerL, 10, 48);
WMSetLabelImagePosition(panel->icornerL, WIPImageOnly);
if (panel->icon)
{
WMPixmap *nicon;
panel->quarter[1] = XCreatePixmap(scr->display, WMWidgetXID(panel->parent), panel->icon->width/2, panel->icon->height/2, WMScreenDepth(scr));
XCopyArea(scr->display, WMGetPixmapXID(panel->icon), panel->quarter[1], gc, panel->icon->width/2, 0, panel->icon->width/2, panel->icon->height/2, 0, 0);
nicon = WMCreatePixmapFromXPixmaps(scr, panel->quarter[1], WMGetPixmapMaskXID(panel->icon),
panel->icon->width/2, panel->icon->height/2, WMScreenDepth(scr));
WMSetLabelImage(panel->icornerL, nicon);
WMReleasePixmap(nicon);
}
panel->hcactionsT[1] = WMCreateTextField(panel->hcactionsF);
WMResizeWidget(panel->hcactionsT[1], 180, 20);
WMMoveWidget(panel->hcactionsT[1], 50, 50);
panel->icornerL = WMCreateLabel(panel->hcactionsF);
WMResizeWidget(panel->icornerL, 24, 24);
WMMoveWidget(panel->icornerL, 10, 78);
WMSetLabelImagePosition(panel->icornerL, WIPImageOnly);
if (panel->icon)
{
WMPixmap *nicon;
panel->quarter[2] = XCreatePixmap(scr->display, WMWidgetXID(panel->parent), panel->icon->width/2, panel->icon->height/2, WMScreenDepth(scr));
XCopyArea(scr->display, WMGetPixmapXID(panel->icon), panel->quarter[2], gc, 0, panel->icon->height/2, panel->icon->width/2, panel->icon->height/2, 0, 0);
nicon = WMCreatePixmapFromXPixmaps(scr, panel->quarter[2], WMGetPixmapMaskXID(panel->icon),
panel->icon->width/2, panel->icon->height/2, WMScreenDepth(scr));
WMSetLabelImage(panel->icornerL, nicon);
WMReleasePixmap(nicon);
}
panel->hcactionsT[2] = WMCreateTextField(panel->hcactionsF);
WMResizeWidget(panel->hcactionsT[2], 180, 20);
WMMoveWidget(panel->hcactionsT[2], 50, 80);
panel->icornerL = WMCreateLabel(panel->hcactionsF);
WMResizeWidget(panel->icornerL, 24, 24);
WMMoveWidget(panel->icornerL, 10, 108);
WMSetLabelImagePosition(panel->icornerL, WIPImageOnly);
if (panel->icon)
{
WMPixmap *nicon;
panel->quarter[3] = XCreatePixmap(scr->display, WMWidgetXID(panel->parent), panel->icon->width/2, panel->icon->height/2, WMScreenDepth(scr));
XCopyArea(scr->display, WMGetPixmapXID(panel->icon), panel->quarter[3], gc, panel->icon->width/2, panel->icon->height/2, panel->icon->width/2, panel->icon->height/2, 0, 0);
nicon = WMCreatePixmapFromXPixmaps(scr, panel->quarter[3], WMGetPixmapMaskXID(panel->icon),
panel->icon->width/2, panel->icon->height/2, WMScreenDepth(scr));
WMSetLabelImage(panel->icornerL, nicon);
WMReleasePixmap(nicon);
}
panel->hcactionsT[3] = WMCreateTextField(panel->hcactionsF);
WMResizeWidget(panel->hcactionsT[3], 180, 20);
WMMoveWidget(panel->hcactionsT[3], 50, 107);
WMMapSubwidgets(panel->hcactionsF);
if (xis)
RReleaseImage(xis);
XFreeGC(scr->display, gc);
WMRealizeWidget(panel->box);
WMMapSubwidgets(panel->box);
showData(panel);
}
static void prepareForClose(_Panel *panel)
{
int i;
WMScreen *scr = WMWidgetScreen(panel->parent);
WMReleasePixmap(panel->icon);
for (i = 0; i < sizeof(panel->quarter) / sizeof(Pixmap); i++)
XFreePixmap(scr->display, panel->quarter[i]);
}
Panel *InitHotCornerShortcuts(WMWidget *parent)
{
_Panel *panel;
panel = wmalloc(sizeof(_Panel));
panel->sectionName = _("Hot Corner Shortcut Preferences");
panel->description = _("Choose actions to perform when you move the\n"
"mouse pointer to the screen corners.");
panel->parent = parent;
panel->callbacks.createWidgets = createPanel;
panel->callbacks.updateDomain = storeData;
panel->callbacks.prepareForClose = prepareForClose;
AddSection(panel, ICON_FILE);
return panel;
}
+8 -7
View File
@@ -84,11 +84,12 @@ static struct keyOption {
{ "RHMaximizeKey", N_("Maximize active window right half") }, { "RHMaximizeKey", N_("Maximize active window right half") },
{ "THMaximizeKey", N_("Maximize active window top half") }, { "THMaximizeKey", N_("Maximize active window top half") },
{ "BHMaximizeKey", N_("Maximize active window bottom half") }, { "BHMaximizeKey", N_("Maximize active window bottom half") },
{ "LTCMaximizeKey", N_("Maximize active window left top corner") }, { "TLCMaximizeKey", N_("Maximize active window top left corner") },
{ "RTCMaximizeKey", N_("Maximize active window right top corner") }, { "TRCMaximizeKey", N_("Maximize active window top right corner") },
{ "LBCMaximizeKey", N_("Maximize active window left bottom corner") }, { "BLCMaximizeKey", N_("Maximize active window bottom left corner") },
{ "RBCMaximizeKey", N_("Maximize active window right bottom corner") }, { "BRCMaximizeKey", N_("Maximize active window bottom right corner") },
{ "MaximusKey", N_("Maximus: Tiled maximization ") }, { "MaximusKey", N_("Tile active window") },
{ "CenterKey", N_("Center active window") },
{ "KeepOnTopKey", N_("Toggle window on top status") }, { "KeepOnTopKey", N_("Toggle window on top status") },
{ "KeepAtBottomKey",N_("Toggle window at bottom status") }, { "KeepAtBottomKey",N_("Toggle window at bottom status") },
{ "OmnipresentKey", N_("Toggle window omnipresent status") }, { "OmnipresentKey", N_("Toggle window omnipresent status") },
@@ -154,7 +155,7 @@ static struct keyOption {
/* Misc. */ /* Misc. */
{ "WindowRelaunchKey", N_("Launch new instance of application") }, { "WindowRelaunchKey", N_("Launch new instance of application") },
{ "ScreenSwitchKey", N_("Switch to Next Screen/Monitor") }, { "ScreenSwitchKey", N_("Switch to next screen/monitor") },
{ "RunKey", N_("Run application") }, { "RunKey", N_("Run application") },
{ "ExitKey", N_("Exit Window Maker") }, { "ExitKey", N_("Exit Window Maker") },
{ "DockRaiseLowerKey", N_("Raise/Lower Dock") }, { "DockRaiseLowerKey", N_("Raise/Lower Dock") },
@@ -550,7 +551,7 @@ static int cmpKeyOptions(const void *v1, const void *v2)
const struct keyOption *opt1 = (struct keyOption *)v1; const struct keyOption *opt1 = (struct keyOption *)v1;
const struct keyOption *opt2 = (struct keyOption *)v2; const struct keyOption *opt2 = (struct keyOption *)v2;
if ((rc = strcmp(opt1->title, opt2->title)) < 0) if ((rc = strncmp(opt1->title, opt2->title, 20)) < 0)
return -1; return -1;
else if (rc > 0) else if (rc > 0)
return 1; return 1;
+1
View File
@@ -35,6 +35,7 @@ WPrefs_SOURCES = \
Expert.c \ Expert.c \
Focus.c \ Focus.c \
FontSimple.c \ FontSimple.c \
HotCornerShortcuts.c \
Icons.c \ Icons.c \
KeyboardShortcuts.c \ KeyboardShortcuts.c \
Menu.c \ Menu.c \
+1
View File
@@ -575,6 +575,7 @@ void Initialize(WMScreen * scr)
InitKeyboardSettings(WPrefs.banner); InitKeyboardSettings(WPrefs.banner);
#endif #endif
InitKeyboardShortcuts(WPrefs.banner); InitKeyboardShortcuts(WPrefs.banner);
InitHotCornerShortcuts(WPrefs.banner);
InitMouseSettings(WPrefs.banner); InitMouseSettings(WPrefs.banner);
InitAppearance(WPrefs.banner); InitAppearance(WPrefs.banner);
+1
View File
@@ -155,6 +155,7 @@ Panel *InitDocks(WMWidget *parent);
Panel *InitExpert(WMWidget *parent); Panel *InitExpert(WMWidget *parent);
Panel *InitFocus(WMWidget *parent); Panel *InitFocus(WMWidget *parent);
Panel *InitFontSimple(WMWidget *parent); Panel *InitFontSimple(WMWidget *parent);
Panel *InitHotCornerShortcuts(WMWidget *parent);
Panel *InitIcons(WMWidget *parent); Panel *InitIcons(WMWidget *parent);
Panel *InitKeyboardShortcuts(WMWidget *parent); Panel *InitKeyboardShortcuts(WMWidget *parent);
Panel *InitMenu(WMWidget *parent); Panel *InitMenu(WMWidget *parent);
+1
View File
@@ -14,6 +14,7 @@ POTFILES = \
$(top_srcdir)/WPrefs.app/Expert.c \ $(top_srcdir)/WPrefs.app/Expert.c \
$(top_srcdir)/WPrefs.app/Focus.c \ $(top_srcdir)/WPrefs.app/Focus.c \
$(top_srcdir)/WPrefs.app/FontSimple.c \ $(top_srcdir)/WPrefs.app/FontSimple.c \
$(top_srcdir)/WPrefs.app/HotCornerShortcuts.c \
$(top_srcdir)/WPrefs.app/Icons.c \ $(top_srcdir)/WPrefs.app/Icons.c \
$(top_srcdir)/WPrefs.app/KeyboardShortcuts.c \ $(top_srcdir)/WPrefs.app/KeyboardShortcuts.c \
$(top_srcdir)/WPrefs.app/Menu.c \ $(top_srcdir)/WPrefs.app/Menu.c \
+1
View File
@@ -26,3 +26,4 @@ et.po Estonian Ivar Smolin <okul@linux.ee>
ca.po Catalan Ernest Adrogué <eadrogue@gmx.net> ca.po Catalan Ernest Adrogué <eadrogue@gmx.net>
nl.po Dutch Alwin <translations@ziggo.nl> nl.po Dutch Alwin <translations@ziggo.nl>
fy.po Frisian Alwin <translations@ziggo.nl> fy.po Frisian Alwin <translations@ziggo.nl>
sr.po Serbian Strahinya Radich <contact@strahinja.org>
+2654
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -15,6 +15,7 @@ dist_tiffdata_DATA = \
ergonomic.tiff \ ergonomic.tiff \
expert.tiff \ expert.tiff \
fonts.tiff \ fonts.tiff \
hotcorners.tiff \
iconprefs.tiff \ iconprefs.tiff \
keyboard.tiff \ keyboard.tiff \
keyboardprefs.tiff \ keyboardprefs.tiff \
Binary file not shown.
+1
View File
@@ -15,6 +15,7 @@ dist_xpmdata_DATA = \
ergonomic.xpm \ ergonomic.xpm \
expert.xpm \ expert.xpm \
fonts.xpm \ fonts.xpm \
hotcorners.xpm \
iconprefs.xpm \ iconprefs.xpm \
keyboard.xpm \ keyboard.xpm \
keyboardprefs.xpm \ keyboardprefs.xpm \
+137
View File
@@ -0,0 +1,137 @@
/* XPM */
static char * hotcorners_xpm[] = {
"48 48 86 1",
" c #2C2C2C",
". c #FEFEFE",
"+ c #505075",
"@ c #4E4E74",
"# c #515176",
"$ c #4B4B72",
"% c #494971",
"& c #515175",
"* c #4F4F74",
"= c #4C4C73",
"- c #696984",
"; c #545477",
"> c #5E5E7D",
", c #676783",
"' c #58587A",
") c #5B5B7C",
"! c #B1B1BB",
"~ c #A5A5B1",
"{ c #A1A1AE",
"] c #AEAEB9",
"^ c #79798F",
"/ c #5C5C7C",
"( c #D5D5DA",
"_ c #E6E6E9",
": c #E8E8EB",
"< c #EDEDEF",
"[ c #E7E7EA",
"} c #FDFDFD",
"| c #FFFFFF",
"1 c #EBEBEC",
"2 c #7F7F93",
"3 c #484871",
"4 c #7B7B85",
"5 c #EFEFEF",
"6 c #A6A6A6",
"7 c #292959",
"8 c #464670",
"9 c #8C8C96",
"0 c #F4F4F4",
"a c #F5F5F6",
"b c #F2F2F2",
"c c #9797A6",
"d c #474770",
"e c #4D4D73",
"f c #9393A3",
"g c #F4F4F5",
"h c #F3F3F3",
"i c #EBEBEE",
"j c #6D6D87",
"k c #9D9DAB",
"l c #F9F9F9",
"m c #F1F1F1",
"n c #A5A5A5",
"o c #EAEAEA",
"p c #6A6A86",
"q c #D3D3D6",
"r c #717171",
"s c #848484",
"t c #9F9FA3",
"u c #47476F",
"v c #323256",
"w c #9B9B9A",
"x c #888889",
"y c #000012",
"z c #6B6B6D",
"A c #757587",
"B c #46466D",
"C c #3B3B47",
"D c #2E2E50",
"E c #242447",
"F c #838383",
"G c #919191",
"H c #202041",
"I c #4F4F73",
"J c #4E4E72",
"K c #232343",
"L c #4F4F4F",
"M c #252548",
"N c #505074",
"O c #3A3A57",
"P c #404060",
"Q c #505076",
"R c #49496B",
"S c #31314E",
"T c #2F2F49",
"U c #434362",
" .",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++@#$%&*=+++++++++++++++++++++++++++%-;>,')@++.",
" ++)!~{]]^@++++++++++++++++++++++++++/(_:<[!#++.",
" ++'[.}|12*++++++++++++++++++++++++++345||.~$++.",
" ++,<||}67+++++++++++++++++++++++++++890||}{%++a",
" ++>:|||bcd+++++++++++++++++++++++++efg||}|]&++.",
" ++;_5h||ij+++++++++++++++++++++++++@kl|mno]*++.",
" ++pqrshltu++++++++++++++++++++++++++vwoxyzAe++.",
" ++BCDEFGHI++++++++++++++++++++++++++JKLMNOP+++.",
" ++QR+*STJ++++++++++++++++++++++++++++JU*++++++.",
" +++++++*++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++QR+*STJ++++++++++++++++++++++++++++JTS*+RQ++.",
" ++BCDEFGHI++++++++++++++++++++++++++IHGFEDCB++.",
" ++pqrshltu++++++++++++++++++++++++++utlhsrqp++.",
" ++;_5h||ij++++++++++++++++++++++++++ji||h5_;++.",
" ++>:|||bcd++++++++++++++++++++++++++dcb|||:>++.",
" ++,<||}67++++++++++++++++++++++++++++76}||<,++.",
" ++'[.}|12*++++++++++++++++++++++++++*21|}.['++.",
" ++)!~{]]^@++++++++++++++++++++++++++@^]]{~!)++.",
" ++@#$%&*=++++++++++++++++++++++++++++=*&%$#@++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
" ++++++++++++++++++++++++++++++++++++++++++++++.",
"................................................"};
+4 -4
View File
@@ -171,10 +171,10 @@
RHMaximizeKey = None; RHMaximizeKey = None;
THMaximizeKey = None; THMaximizeKey = None;
BHMaximizeKey = None; BHMaximizeKey = None;
LTCMaximizeKey = None; TLCMaximizeKey = None;
RTCMaximizeKey = None; TRCMaximizeKey = None;
LBCMaximizeKey = None; BLCMaximizeKey = None;
RBCMaximizeKey = None; BRCMaximizeKey = None;
MaximusKey = None; MaximusKey = None;
KeepOnTopKey = None; KeepOnTopKey = None;
KeepAtBottomKey = None; KeepAtBottomKey = None;
+4
View File
@@ -9,6 +9,7 @@ GENERATED_MENUS =\
appearance.menu\ appearance.menu\
appearance.menu.fy\ appearance.menu.fy\
appearance.menu.nl\ appearance.menu.nl\
appearance.menu.sr\
menu\ menu\
menu.bg\ menu.bg\
menu.fi\ menu.fi\
@@ -18,6 +19,7 @@ GENERATED_MENUS =\
menu.nl\ menu.nl\
menu.ro\ menu.ro\
menu.sk\ menu.sk\
menu.sr\
menu.zh_TW\ menu.zh_TW\
plmenu\ plmenu\
plmenu.bg\ plmenu.bg\
@@ -30,6 +32,7 @@ GENERATED_MENUS =\
plmenu.pl\ plmenu.pl\
plmenu.ro\ plmenu.ro\
plmenu.sk\ plmenu.sk\
plmenu.sr\
plmenu.zh_CN\ plmenu.zh_CN\
plmenu.zh_TW\ plmenu.zh_TW\
wmmacros wmmacros
@@ -67,6 +70,7 @@ dist_prefsdata_DATA =\
background.menu\ background.menu\
background.menu.fy\ background.menu.fy\
background.menu.nl\ background.menu.nl\
background.menu.sr\
exitscript.sh\ exitscript.sh\
README\ README\
README.themes\ README.themes\
+2
View File
@@ -64,6 +64,7 @@ menu.bg Bulgarian Slavei Karadjov <slaff@exco.net>
menu.sk Slovak judas@hell <tomka@oalevice.sk> menu.sk Slovak judas@hell <tomka@oalevice.sk>
menu.nl Dutch Alwin <translations@ziggo.nl> menu.nl Dutch Alwin <translations@ziggo.nl>
menu.fy Frisian Alwin <translations@ziggo.nl> menu.fy Frisian Alwin <translations@ziggo.nl>
menu.sr Serbian Strahinya Radich <contact@strahinja.org>
@@ -80,4 +81,5 @@ plmenu.sk Slovak judas@hell <tomka@oalevice.sk>
plmenu.ja Japanese Seiichi SATO <sato@cvs-net.co.jp> plmenu.ja Japanese Seiichi SATO <sato@cvs-net.co.jp>
plmenu.nl Dutch Alwin <translations@ziggo.nl> plmenu.nl Dutch Alwin <translations@ziggo.nl>
plmenu.fy Frisian Alwin <translations@ziggo.nl> plmenu.fy Frisian Alwin <translations@ziggo.nl>
plmenu.sr Serbian Strahinya Radich <contact@strahinja.org>
+12
View File
@@ -0,0 +1,12 @@
#include "wmmacros"
"Изглед" MENU
"Позадина" OPEN_MENU background.menu
"Стилови" OPEN_MENU -noext STYLES_DIR USER_STYLES_DIR WITH setstyle
"Теме" OPEN_MENU -noext THEMES_DIR USER_THEMES_DIR WITH setstyle
"Сетови икона" OPEN_MENU -noext ICON_SETS_DIR USER_ICON_SETS_DIR WITH seticons
"Сачувај сет икона" EXEC geticonset USER_ICON_SETS_DIR/"%a(Назив сета икона)"
"Сачувај тему" EXEC getstyle -p "%a(Назив теме)"
"Алат за подешавања" EXEC #wprefs#
"Изглед" END
+32
View File
@@ -0,0 +1,32 @@
#include "wmmacros"
"Позадина" MENU
"Једнобојна" MENU
"Црна" WS_BACK '(solid, black)'
"Плава" WS_BACK '(solid, "#505075")'
"Индиго" WS_BACK '(solid, "#243e6c")'
"Маринско плава" WS_BACK '(solid, "#224477")'
"Тамно плава" WS_BACK '(solid, "#180090")'
"Љубичаста" WS_BACK '(solid, "#554466")'
"Боја жита" WS_BACK '(solid, "wheat4")'
"Тамно сива" WS_BACK '(solid, "#333340")'
"Боја вина" WS_BACK '(solid, "#400020")'
"Једнобојна" END
"Претапање" MENU
"Залазак сунца" WS_BACK '(mvgradient, deepskyblue4, black, deepskyblue4, tomato4)'
"Небо" WS_BACK '(vgradient, blue4, white)'
"Нијансе плаве" WS_BACK '(vgradient, "#7080a5", "#101020")'
"Индиго нијансе" WS_BACK '(vgradient, "#746ebc", "#242e4c")'
"Нијансе љубичасте" WS_BACK '(vgradient, "#654c66", "#151426")'
"Нијансе боје жита" WS_BACK '(vgradient, "#a09060", "#302010")'
"Нијансе сиве" WS_BACK '(vgradient, "#636380", "#131318")'
"Нијансе боје вина" WS_BACK '(vgradient, "#600040", "#180010")'
"Претапање" END
"Слике" MENU
"Поплочано" OPEN_MENU BACKGROUNDS_DIR USER_BACKGROUNDS_DIR WITH wmsetbg -u -t
"Развучене" OPEN_MENU BACKGROUNDS_DIR USER_BACKGROUNDS_DIR WITH wmsetbg -u -s
"Центриране" OPEN_MENU BACKGROUNDS_DIR USER_BACKGROUNDS_DIR WITH wmsetbg -u -e
"Максимизоване" OPEN_MENU BACKGROUNDS_DIR USER_BACKGROUNDS_DIR WITH wmsetbg -u -a
"Попуњене" OPEN_MENU BACKGROUNDS_DIR USER_BACKGROUNDS_DIR WITH wmsetbg -u -f
"Слике" END
"Позадина" END
+199
View File
@@ -0,0 +1,199 @@
/*
* Root Menu definition for WindowMaker
*
* Syntax is:
*
* <Title> [SHORTCUT <Shortcut>] <Command> <Parameters>
*
* <Title> is any string to be used as title. Must be enclosed with " if it
* has spaces
*
* SHORTCUT specifies a shortcut for that item. <Shortcut> has the
* same syntax of the shortcuts key options in the
* $HOME/GNUstep/Defaults/WindowMaker file, such as RootMenuKey or MiniaturizeKey.
*
* You can't specify a shortcut for a MENU or OPEN_MENU entry.
*
* <Command> one of the valid commands:
* MENU - starts (sub)menu definition
* END - end (sub)menu definition
* OPEN_MENU - opens a menu from a file, pipe or directory(ies) contents
* and eventually precede each with a command.
* WORKSPACE_MENU - adds a submenu for workspace operations. Only one
* workspace_menu is allowed.
* EXEC <program> - executes an external program
* SHEXEC <command> - executes a shell command (like gimp > /dev/null)
* EXIT - exits the window manager
* RESTART [<window manager>] - restarts WindowMaker or start another
* window manager
* REFRESH - refreshes the desktop
* ARRANGE_ICONS - rearranges the icons on the workspace
* SHUTDOWN - kills all clients (and close the X window session)
* SHOW_ALL - unhides all windows on workspace
* HIDE_OTHERS - hides all windows on the workspace, except the
* focused one (or the last one that received focus)
* SAVE_SESSION - saves the current state of the desktop, which include
* all running applications, all their hints (geometry,
* position on screen, workspace they live on, the dock
* or clip from where they were launched, and
* if minimized, shaded or hidden. Also saves the current
* workspace the user is on. All will be restored on every
* start of windowmaker until another SAVE_SESSION or
* CLEAR_SESSION is used. If SaveSessionOnExit = Yes; in
* WindowMaker domain file, then saving is automatically
* done on every windowmaker exit, overwriting any
* SAVE_SESSION or CLEAR_SESSION (see below).
* CLEAR_SESSION - clears any previous saved session. This will not have
* any effect if SaveSessionOnExit is True.
* INFO - shows the Info Panel
*
* OPEN_MENU syntax:
* 1. File menu handling.
* // opens file.menu which must contain a valid menu file and inserts
* // it in current position
* OPEN_MENU file.menu
* 2. Pipe menu handling.
* // opens command and uses its stdout to construct menu.
* // Command's output must be a valid menu description.
* // The space between '|' and command itself is optional.
* // Use '||' instead of '|' if you want the menu to always update
* // when opened. It might be slow.
* OPEN_MENU | command
* OPEN_MENU || command
* 3. Directory handling.
* // Opens one or more directories and constructs a menu with all
* // the subdirectories and executable files in them sorted
* // alphabetically.
* OPEN_MENU /some/dir [/some/other/dir ...]
* 4. Directory handling with command.
* // Opens one or more directories and constructs menu with all
* // subdirectories and readable files in them sorted alphabetically,
* // preceding each of them with command.
* OPEN_MENU [options] /some/dir [/some/other/dir ...] WITH command -options
* Options:
* -noext strip whatever is after the last dot in the
* file name
*
* // Use #usergnusteppath# as a placeholder for the path to the user
* // GNUstep directory. Window Maker will replace this with the value
* // of WMAKER_USER_ROOT, if this environment variable is set, or
* // "~/GNUstep" otherwise
*
* <Parameters> is the program to execute.
*
* ** Options for command line in EXEC:
* %s - substitute with current selection
* %a(title[,prompt]) - opens an input box with the specified title and the
* optional prompt and do substitution with what you typed
* %w - substitute with XID for the current focused window
* %W - substitute with the number of the current workspace
*
* You can override special characters (as % and ") with the \ character:
* ex: xterm -T "\"Hello World\""
*
* You can also use character escapes, like \n
*
* Each MENU statement must have one mathching END statement at the end.
*
* Example:
*
* "Test" MENU
* "XTerm" EXEC xterm
* // creates a submenu with the contents of /usr/openwin/bin
* "XView apps" OPEN_MENU "/usr/openwin/bin"
* // some X11 apps in different directories
* "X11 apps" OPEN_MENU /usr/X11/bin $HOME/bin/X11
* // set some background images
* "Background" OPEN_MENU -noext $HOME/images /usr/share/images WITH wmsetbg -u -t
* // inserts the style.menu in this entry
* "Style" OPEN_MENU style.menu
* "Test" END
*/
#include "wmmacros"
"Апликације" MENU
"Информације" MENU
"Информациони панел" INFO_PANEL
"Права" LEGAL_PANEL
"Системска конзола" EXEC xconsole
"Искоришћеност система" SHEXEC xosview || xload
"Листа процеса" EXEC xterm -e top
"Прегледач упутства" EXEC xman
"Информације" END
"Покрени..." SHEXEC %a(Покрени,Унесите наредбу за покретање:)
"XTerm" EXEC xterm -sb
"Mozilla Firefox" EXEC firefox
"Радне површине" WORKSPACE_MENU
"Апликације" MENU
"Gimp" SHEXEC gimp >/dev/null
"Ghostview" EXEC ghostview %a(GhostView,Enter file to view)
"Xpdf" EXEC xpdf %a(Xpdf,Enter PDF to view)
"Abiword" EXEC abiword
"Dia" EXEC dia
"OpenOffice.org" MENU
"OpenOffice.org" EXEC ooffice
"Писач" EXEC oowriter
"Табела" EXEC oocalc
"Цртање" EXEC oodraw
"Презентације" EXEC ooimpress
"OpenOffice.org" END
"Уређивачи" MENU
"XEmacs" EXEC xemacs
"Emacs" EXEC emacs
"XJed" EXEC xjed
"VI" EXEC xterm -e vi
"GVIM" EXEC gvim
"NEdit" EXEC nedit
"Xedit" EXEC xedit
"Уређивачи" END
"Мултимедија" MENU
"XMMS" MENU
"XMMS" EXEC xmms
"XMMS пусти/паузирај" EXEC xmms -t
"XMMS заустави" EXEC xmms -s
"XMMS" END
"Видео плејер Xine" EXEC xine
"MPlayer" EXEC mplayer
"Мултимедија" END
"Апликације" END
"Помоћни програми" MENU
"Калкулатор" EXEC xcalc
"Особине прозора" SHEXEC xprop | xmessage -center -title 'xprop' -file -
"Бирач фонта" EXEC xfontsel
"Лупа" EXEC wmagnify
"Мапа боја" EXEC xcmap
"Убиј X апликацију" EXEC xkill
"Помоћни програми" END
"Избор" MENU
"Копирај" SHEXEC echo '%s' | wxcopy
"Пошаљи мејлом на" EXEC xterm -name mail -T "Pine" -e pine %s
"Прегледај веб читачем" EXEC netscape %s
"Тражи у упутству" SHEXEC MANUAL_SEARCH(%s)
"Избор" END
"Наредбе" MENU
"Сакриј остале" HIDE_OTHERS
"Прикажи све" SHOW_ALL
"Поређај иконе" ARRANGE_ICONS
"Освежи" REFRESH
"Закључај" EXEC xlock -allowroot -usefirst
"Наредбе" END
"Изглед" OPEN_MENU "appearance.menu"
"Сесија" MENU
"Сачувај сесију" SAVE_SESSION
"Очисти сесију" CLEAR_SESSION
"Поново покрени Window Maker" RESTART
"Покрени BlackBox" RESTART blackbox
"Покрени IceWM" RESTART icewm
"Изађи" EXIT
"Сесија" END
"Апликације" END
+76
View File
@@ -0,0 +1,76 @@
("Апликације",
("Информације",
("Информациони панел", INFO_PANEL),
("Права", LEGAL_PANEL),
("Системска конзола", EXEC, "xconsole"),
("Искоришћеност система", SHEXEC, "xosview || xload"),
("Листа процеса", EXEC, "xterm -e top"),
("Прегледач упутства", EXEC, "xman")
),
("Покрени...", SHEXEC, "%a(Покрени,Унесите наредбу за покретање:)"),
("XTerm", EXEC, "xterm -sb"),
("Mozilla Firefox", EXEC, "firefox"),
("Радне површине", WORKSPACE_MENU),
("Апликације",
("Gimp", SHEXEC, "gimp >/dev/null"),
("Ghostview", EXEC, "ghostview %a(Enter file to view)"),
("Xpdf", EXEC, "xpdf %a(Enter PDF to view)"),
("Abiword", EXEC, "abiword"),
("Dia", EXEC, "dia"),
("OpenOffice.org",
("OpenOffice.org", EXEC, "ooffice"),
("Писач", EXEC, "oowriter"),
("Табела", EXEC, "oocalc"),
("Цртање", EXEC, "oodraw"),
("Презентације", EXEC, "ooimpress")
),
("Уређивачи",
("XEmacs", EXEC, "xemacs"),
("Emacs", EXEC, "emacs"),
("XJed", EXEC, "xjed"),
("VI", EXEC, "xterm -e vi"),
("GVIM", EXEC, "gvim"),
("NEdit", EXEC, "nedit"),
("Xedit", EXEC, "xedit")
),
("Мултимедија",
("XMMS",
("XMMS", EXEC, "xmms"),
("XMMS пусти/паузирај", EXEC, "xmms -t"),
("XMMS заустави", EXEC, "xmms -s")
),
("Видео плејер Xine", EXEC, "xine"),
("MPlayer", EXEC, "mplayer")
)
),
("Помоћни програми",
("Калкулатор", EXEC, "xcalc"),
("Особине прозора", SHEXEC, "xprop | xmessage -center -title 'xprop' -file -"),
("Бирач фонта", EXEC, "xfontsel"),
("Лупа", EXEC, "wmagnify"),
("Мапа боја", EXEC, "xcmap"),
("Убиј X апликацију", EXEC, "xkill")
),
("Избор",
("Копирај", SHEXEC, "echo '%s' | wxcopy"),
("Пошаљи мејлом на", EXEC, "xterm -name mail -T Pine -e pine %s"),
("Прегледај веб читачем", EXEC, "mozilla %s"),
("Тражи у упутству", EXEC, "MANUAL_SEARCH(%s)")
),
("Наредбе",
("Сакриј остале", HIDE_OTHERS),
("Прикажи све", SHOW_ALL),
("Поређај иконе", ARRANGE_ICONS),
("Освежи", REFRESH),
("Закључај", EXEC, "xlock -allowroot -usefirst")
),
("Изглед", OPEN_MENU, "appearance.menu"),
("Сесија",
("Сачувај сесију", SAVE_SESSION),
("Очисти сесију", CLEAR_SESSION),
("Поново покрени Window Maker", RESTART),
("Покрени BlackBox", RESTART, blackbox),
("Покрени IceWM", RESTART, icewm),
("Изађи", EXIT)
)
)
+2 -3
View File
@@ -2,7 +2,7 @@ dnl ============================================================================
dnl dnl
dnl Window Maker autoconf input dnl Window Maker autoconf input
dnl dnl
AC_COPYRIGHT([Copyright (c) 2001-2015 The Window Maker Team]) AC_COPYRIGHT([Copyright (c) 2001-2023 The Window Maker Team])
dnl dnl
dnl ============================================================================ dnl ============================================================================
dnl dnl
@@ -34,7 +34,7 @@ AC_PREREQ([2.69])
dnl Configuration for Autoconf and Automake dnl Configuration for Autoconf and Automake
dnl ======================================= dnl =======================================
AC_INIT([WindowMaker],[0.95.9],[wmaker-dev@googlegroups.com],[WindowMaker],[http://www.windowmaker.org/]) AC_INIT([WindowMaker],[0.96.0],[wmaker-dev@googlegroups.com],[WindowMaker],[http://www.windowmaker.org/])
AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])
@@ -455,7 +455,6 @@ AC_CHECK_HEADERS([syslog.h], [AC_DEFINE([HAVE_SYSLOG], [1], [Check for syslog])]
dnl Checks for header files dnl Checks for header files
dnl ======================= dnl =======================
AC_HEADER_SYS_WAIT AC_HEADER_SYS_WAIT
AC_HEADER_TIME
AC_CHECK_HEADERS(fcntl.h limits.h sys/ioctl.h libintl.h poll.h malloc.h ctype.h \ AC_CHECK_HEADERS(fcntl.h limits.h sys/ioctl.h libintl.h poll.h malloc.h ctype.h \
string.h strings.h) string.h strings.h)
+8 -8
View File
@@ -80,14 +80,14 @@ AS_VAR_PUSHDEF([VAR],[ax_cv_cflags_gcc_option_$2])dnl
AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for gcc m4_ifval($2,$2,-option)], AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for gcc m4_ifval($2,$2,-option)],
VAR,[VAR="no, unknown" VAR,[VAR="no, unknown"
AC_LANG_SAVE AC_LANG_SAVE
AC_LANG_C AC_LANG(C)
ac_save_[]FLAGS="$[]FLAGS" ac_save_[]FLAGS="$[]FLAGS"
for ac_arg dnl for ac_arg dnl
in "-pedantic -Werror % m4_ifval($2,$2,-option)" dnl GCC in "-pedantic -Werror % m4_ifval($2,$2,-option)" dnl GCC
"-pedantic % m4_ifval($2,$2,-option) %% no, obsolete" dnl new GCC "-pedantic % m4_ifval($2,$2,-option) %% no, obsolete" dnl new GCC
# #
do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'`
AC_TRY_COMPILE([],[return 0;], AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[return 0;])],
[VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break])
done done
FLAGS="$ac_save_[]FLAGS" FLAGS="$ac_save_[]FLAGS"
@@ -116,14 +116,14 @@ AS_VAR_PUSHDEF([VAR],[ax_cv_cxxflags_gcc_option_$2])dnl
AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for gcc m4_ifval($2,$2,-option)], AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for gcc m4_ifval($2,$2,-option)],
VAR,[VAR="no, unknown" VAR,[VAR="no, unknown"
AC_LANG_SAVE AC_LANG_SAVE
AC_LANG_CPLUSPLUS AC_LANG(C++)
ac_save_[]FLAGS="$[]FLAGS" ac_save_[]FLAGS="$[]FLAGS"
for ac_arg dnl for ac_arg dnl
in "-pedantic -Werror % m4_ifval($2,$2,-option)" dnl GCC in "-pedantic -Werror % m4_ifval($2,$2,-option)" dnl GCC
"-pedantic % m4_ifval($2,$2,-option) %% no, obsolete" dnl new GCC "-pedantic % m4_ifval($2,$2,-option) %% no, obsolete" dnl new GCC
# #
do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'`
AC_TRY_COMPILE([],[return 0;], AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[return 0;])],
[VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break])
done done
FLAGS="$ac_save_[]FLAGS" FLAGS="$ac_save_[]FLAGS"
@@ -151,14 +151,14 @@ AS_VAR_PUSHDEF([VAR],[ax_cv_cflags_gcc_option_$1])dnl
AC_CACHE_CHECK([m4_ifval($2,$2,FLAGS) for gcc m4_ifval($1,$1,-option)], AC_CACHE_CHECK([m4_ifval($2,$2,FLAGS) for gcc m4_ifval($1,$1,-option)],
VAR,[VAR="no, unknown" VAR,[VAR="no, unknown"
AC_LANG_SAVE AC_LANG_SAVE
AC_LANG_C AC_LANG(C)
ac_save_[]FLAGS="$[]FLAGS" ac_save_[]FLAGS="$[]FLAGS"
for ac_arg dnl for ac_arg dnl
in "-pedantic -Werror % m4_ifval($1,$1,-option)" dnl GCC in "-pedantic -Werror % m4_ifval($1,$1,-option)" dnl GCC
"-pedantic % m4_ifval($1,$1,-option) %% no, obsolete" dnl new GCC "-pedantic % m4_ifval($1,$1,-option) %% no, obsolete" dnl new GCC
# #
do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'`
AC_TRY_COMPILE([],[return 0;], AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[return 0;])],
[VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break])
done done
FLAGS="$ac_save_[]FLAGS" FLAGS="$ac_save_[]FLAGS"
@@ -187,14 +187,14 @@ AS_VAR_PUSHDEF([VAR],[ax_cv_cxxflags_gcc_option_$1])dnl
AC_CACHE_CHECK([m4_ifval($2,$2,FLAGS) for gcc m4_ifval($1,$1,-option)], AC_CACHE_CHECK([m4_ifval($2,$2,FLAGS) for gcc m4_ifval($1,$1,-option)],
VAR,[VAR="no, unknown" VAR,[VAR="no, unknown"
AC_LANG_SAVE AC_LANG_SAVE
AC_LANG_CPLUSPLUS AC_LANG(C++)
ac_save_[]FLAGS="$[]FLAGS" ac_save_[]FLAGS="$[]FLAGS"
for ac_arg dnl for ac_arg dnl
in "-pedantic -Werror % m4_ifval($1,$1,-option)" dnl GCC in "-pedantic -Werror % m4_ifval($1,$1,-option)" dnl GCC
"-pedantic % m4_ifval($1,$1,-option) %% no, obsolete" dnl new GCC "-pedantic % m4_ifval($1,$1,-option) %% no, obsolete" dnl new GCC
# #
do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'`
AC_TRY_COMPILE([],[return 0;], AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[return 0;])],
[VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break])
done done
FLAGS="$ac_save_[]FLAGS" FLAGS="$ac_save_[]FLAGS"
+3 -2
View File
@@ -47,14 +47,15 @@ AC_DEFUN([WM_CHECK_XFT_VERSION],
AC_CACHE_CHECK([whether libXft is at least version $1], [ac_cv_lib_xft_version_ok], AC_CACHE_CHECK([whether libXft is at least version $1], [ac_cv_lib_xft_version_ok],
[CPPFLAGS_save="$CPPFLAGS" [CPPFLAGS_save="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $XFT_CFLAGS $inc_search_path" CPPFLAGS="$CPPFLAGS $XFT_CFLAGS $inc_search_path"
AC_TRY_LINK([ AC_LINK_IFELSE(
[AC_LANG_PROGRAM([
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <X11/Xft/Xft.h> #include <X11/Xft/Xft.h>
], [ ], [
#if !defined(XFT_VERSION) || XFT_VERSION < ]XFT_REQUIRED_VERSION[ #if !defined(XFT_VERSION) || XFT_VERSION < ]XFT_REQUIRED_VERSION[
#error libXft on this system is too old. Consider upgrading to at least $1 #error libXft on this system is too old. Consider upgrading to at least $1
#endif #endif
], [ac_cv_lib_xft_version_ok=yes], [ac_cv_lib_xft_version_ok=no]) ])], [ac_cv_lib_xft_version_ok=yes], [ac_cv_lib_xft_version_ok=no])
CPPFLAGS="$CPPFLAGS_save"]) CPPFLAGS="$CPPFLAGS_save"])
m4_undefine([XFT_REQUIRED_VERSION])dnl m4_undefine([XFT_REQUIRED_VERSION])dnl
AS_IF([test "x$ac_cv_lib_xft_version_ok" != "xyes"], [$3], [$2])dnl AS_IF([test "x$ac_cv_lib_xft_version_ok" != "xyes"], [$3], [$2])dnl
+1 -1
View File
@@ -1,7 +1,7 @@
# wm_i18n.m4 - Macros to check and enable translations in WindowMaker # wm_i18n.m4 - Macros to check and enable translations in WindowMaker
# #
# Copyright (c) 2014-2015 Christophe CURIS # Copyright (c) 2014-2015 Christophe CURIS
# Copyright (c) 2015 The Window Maker Tean # Copyright (c) 2015-2021 The Window Maker Tean
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
+3 -3
View File
@@ -198,9 +198,9 @@ AC_DEFUN_ONCE([WM_IMGFMT_CHECK_WEBP],
dnl a symbol without first using the header to handle it dnl a symbol without first using the header to handle it
wm_save_LIBS="$LIBS" wm_save_LIBS="$LIBS"
LIBS="$LIBS -lwebp" LIBS="$LIBS -lwebp"
AC_TRY_LINK( AC_LINK_IFELSE(
[@%:@include <webp/decode.h>], [AC_LANG_PROGRAM([@%:@include <webp/decode.h>],
[WebPGetFeatures(NULL, 1024, NULL);], [WebPGetFeatures(NULL, 1024, NULL);])],
[wm_cv_imgfmt_webp="-lwebp"]) [wm_cv_imgfmt_webp="-lwebp"])
LIBS="$wm_save_LIBS" LIBS="$wm_save_LIBS"
AS_IF([test "x$enable_webp$wm_cv_imgfmt_webp" = "xyesno"], AS_IF([test "x$enable_webp$wm_cv_imgfmt_webp" = "xyesno"],
+1 -1
View File
@@ -1,6 +1,6 @@
# wm_libexif.m4 - Macros to check proper libexif # wm_libexif.m4 - Macros to check proper libexif
# #
# Copyright (c) 2014 Window Maker Team # Copyright (c) 2014-2015 Window Maker Team
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
+2 -1
View File
@@ -7,7 +7,8 @@ CLEANFILES = $(CATALOGS) $(DOMAIN).pot
# Please keep this sorted in alphabetic order! # Please keep this sorted in alphabetic order!
EXTRA_DIST = be.po bg.po bs.po ca.po cs.po da.po de.po el.po es.po et.po \ EXTRA_DIST = be.po bg.po bs.po ca.po cs.po da.po de.po el.po es.po et.po \
fi.po fr.po fy.po gl.po hr.po hu.po hy.po it.po ja.po ko.po ms.po nl.po \ fi.po fr.po fy.po gl.po hr.po hu.po hy.po it.po ja.po ko.po ms.po nl.po \
no.po pl.po pt.po ro.po ru.po sk.po sv.po tr.po uk.po zh_CN.po zh_TW.po no.po pl.po pt.po ro.po ru.po sk.po sr.po sv.po tr.po uk.po zh_CN.po \
zh_TW.po
POTFILES = \ POTFILES = \
$(top_srcdir)/src/actions.c \ $(top_srcdir)/src/actions.c \
+1
View File
@@ -45,6 +45,7 @@ bs.po Bosnian Ahmet Mulalic <am@lugzdk.ba>
hy.po Armenian Norayr Chilignaryan <chnorik@gmail.com> hy.po Armenian Norayr Chilignaryan <chnorik@gmail.com>
nl.po Dutch Alwin <translations@ziggo.nl> nl.po Dutch Alwin <translations@ziggo.nl>
fy.po Frisian Alwin <translations@ziggo.nl> fy.po Frisian Alwin <translations@ziggo.nl>
sr.po Serbian Strahinya Radich <contact@strahinja.org>
Some translations are based on previous translations by other people. Some translations are based on previous translations by other people.
+1 -1
View File
@@ -1,5 +1,5 @@
# Translation into Western Frisian for Window Maker # Translation into Western Frisian for Window Maker
# Copyright (C) 2015-2016 Window Maker Developers Team # Copyright (C) 2015-2020 Window Maker Developers Team
# This file is distributed under the same license as the windowmaker package. # This file is distributed under the same license as the windowmaker package.
# Original by Alwin <translations@ziggo.nl>, 2015. # Original by Alwin <translations@ziggo.nl>, 2015.
# #
+1 -1
View File
@@ -1,5 +1,5 @@
# New translation into Dutch for Window Maker # New translation into Dutch for Window Maker
# Copyright (C) 2014-2016 Window Maker Developers Team # Copyright (C) 2014-2020 Window Maker Developers Team
# This file is distributed under the same license as the windowmaker package. # This file is distributed under the same license as the windowmaker package.
# Original by Alwin <translations@ziggo.nl>, 2014. # Original by Alwin <translations@ziggo.nl>, 2014.
# #
+2023
View File
File diff suppressed because it is too large Load Diff
+13 -6
View File
@@ -4,7 +4,7 @@
# Window Maker window manager # Window Maker window manager
# #
# Copyright (c) 2014 Christophe CURIS # Copyright (c) 2014 Christophe CURIS
# Copyright (c) 2014 Window Maker Team # Copyright (c) 2014-2015 Window Maker Team
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@@ -77,10 +77,8 @@ while [ $# -gt 0 ]; do
-v) -v)
shift shift
# Version may be 'x:y:z', we keep only 'x' version="$1"
version="`echo "$1" | sed -e 's,:.*$,,' `" echo "$version" | grep -E '^[1-9][0-9]*(:[0-9]+(:[0-9]+)?)?$' > /dev/null || \
# the version should only be a number
echo "$version" | grep '^[1-9][0-9]*$' > /dev/null || \
arg_error "version \"$1\" is not valid" arg_error "version \"$1\" is not valid"
;; ;;
@@ -109,9 +107,18 @@ fi
# generate the rest of the script so that other symbols will not be kept. # generate the rest of the script so that other symbols will not be kept.
awk ' awk '
BEGIN { BEGIN {
# Version number here uses only 1 number from the full version used in libtool
libversion="'"$version"'";
if (split(libversion, subversions, ":") > 1) {
# Calculate [CURRENT - AGE], the goal is that the number will not
# change when functions are added to the API, but it will be incremented
# when functions are removed or argument change (which breaks compat)
libversion = subversions[1] - subversions[3];
}
print "/* Generated version-script for ld */"; print "/* Generated version-script for ld */";
print ""; print "";
print "'"$libname$version"'"; print "'"$libname"'" libversion;
print "{"; print "{";
print " global:"; print " global:";
} }
+1 -1
View File
@@ -4,7 +4,7 @@
# Window Maker window manager # Window Maker window manager
# #
# Copyright (c) 2014-2015 Christophe CURIS # Copyright (c) 2014-2015 Christophe CURIS
# Copyright (c) 2015 Window Maker Team # Copyright (c) 2015-2019 Window Maker Team
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
+6 -1
View File
@@ -2,7 +2,7 @@
* Window Maker window manager * Window Maker window manager
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2023 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -474,6 +474,11 @@ extern struct WPreferences {
char show_clip_title; char show_clip_title;
char hot_corners; /* let corners execute actions */
int hot_corner_delay; /* Delay after which the hot corner is triggered */
int hot_corner_edge; /* Hot corner edge size */
char *hot_corner_actions[4]; /* Action of each corner */
struct { struct {
#ifdef USE_ICCCM_WMREPLACE #ifdef USE_ICCCM_WMREPLACE
unsigned int replace:1; /* replace existing window manager */ unsigned int replace:1; /* replace existing window manager */
+48 -7
View File
@@ -4,7 +4,7 @@
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 1998-2003 Dan Pascu * Copyright (c) 1998-2003 Dan Pascu
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2023 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -404,7 +404,7 @@ void wMaximizeWindow(WWindow *wwin, int directions, int head)
usableArea = wGetUsableAreaForHead(scr, head, &totalArea, True); usableArea = wGetUsableAreaForHead(scr, head, &totalArea, True);
/* Only save directions, not kbd or xinerama hints */ /* Only save directions, not kbd or xinerama hints */
directions &= (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS); directions &= (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS | MAX_CENTRAL);
if (WFLAGP(wwin, full_maximize)) if (WFLAGP(wwin, full_maximize))
usableArea = totalArea; usableArea = totalArea;
@@ -431,12 +431,31 @@ void wMaximizeWindow(WWindow *wwin, int directions, int head)
wwin->maximus_y = new_y; wwin->maximus_y = new_y;
wwin->flags.old_maximized |= MAX_MAXIMUS; wwin->flags.old_maximized |= MAX_MAXIMUS;
} else { } else {
/* center the window if can fit, if not sticking it to the screen edges */
if (directions & MAX_CENTRAL) {
if (wwin->frame->core->height > (usableArea.y2 - usableArea.y1)) {
new_y = usableArea.y1;
new_height = usableArea.y2 - usableArea.y1 - adj_size;
} else {
new_height = (wwin->old_geometry.height) ? wwin->old_geometry.height : wwin->frame->core->height;
new_height += wwin->frame->top_width + wwin->frame->bottom_width;
new_y = half_scr_height - new_height / 2;
}
if (wwin->frame->core->width > (usableArea.x2 - usableArea.x1)) {
new_x = usableArea.x1;
new_width = usableArea.x2 - usableArea.x1 - adj_size;
}
else {
new_width = (wwin->old_geometry.width) ? wwin->old_geometry.width : wwin->frame->core->width;
new_x = half_scr_width - new_width / 2;
}
}
/* set default values if no option set then */ /* set default values if no option set then */
if (!(directions & (MAX_HORIZONTAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS))) { if (!(directions & (MAX_HORIZONTAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS | MAX_CENTRAL))) {
new_width = (wwin->old_geometry.width) ? wwin->old_geometry.width : wwin->frame->core->width; new_width = (wwin->old_geometry.width) ? wwin->old_geometry.width : wwin->frame->core->width;
new_x = (wwin->old_geometry.x) ? wwin->old_geometry.x : wwin->frame_x; new_x = (wwin->old_geometry.x) ? wwin->old_geometry.x : wwin->frame_x;
} }
if (!(directions & (MAX_VERTICAL | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS))) { if (!(directions & (MAX_VERTICAL | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS| MAX_CENTRAL))) {
new_height = (wwin->old_geometry.height) ? wwin->old_geometry.height : wwin->frame->core->height; new_height = (wwin->old_geometry.height) ? wwin->old_geometry.height : wwin->frame->core->height;
new_y = (wwin->old_geometry.y) ? wwin->old_geometry.y : wwin->frame_y; new_y = (wwin->old_geometry.y) ? wwin->old_geometry.y : wwin->frame_y;
} }
@@ -445,17 +464,26 @@ void wMaximizeWindow(WWindow *wwin, int directions, int head)
if (directions & MAX_LEFTHALF) { if (directions & MAX_LEFTHALF) {
new_width = half_scr_width - adj_size; new_width = half_scr_width - adj_size;
new_x = usableArea.x1; new_x = usableArea.x1;
if (directions & MAX_CENTRAL) {
new_y = half_scr_height - wwin->old_geometry.height / 2;
}
} else if (directions & MAX_RIGHTHALF) { } else if (directions & MAX_RIGHTHALF) {
new_width = half_scr_width - adj_size; new_width = half_scr_width - adj_size;
new_x = usableArea.x1 + half_scr_width; new_x = usableArea.x1 + half_scr_width;
if (directions & MAX_CENTRAL)
new_y = half_scr_height - wwin->old_geometry.height / 2;
} }
/* top|bottom position */ /* top|bottom position */
if (directions & MAX_TOPHALF) { if (directions & MAX_TOPHALF) {
new_height = half_scr_height - adj_size; new_height = half_scr_height - adj_size;
new_y = usableArea.y1; new_y = usableArea.y1;
if (directions & MAX_CENTRAL)
new_x = half_scr_width - wwin->old_geometry.width / 2;
} else if (directions & MAX_BOTTOMHALF) { } else if (directions & MAX_BOTTOMHALF) {
new_height = half_scr_height - adj_size; new_height = half_scr_height - adj_size;
new_y = usableArea.y1 + half_scr_height; new_y = usableArea.y1 + half_scr_height;
if (directions & MAX_CENTRAL)
new_x = half_scr_width - wwin->old_geometry.width / 2;
} }
/* vertical|horizontal position */ /* vertical|horizontal position */
@@ -494,7 +522,7 @@ void wMaximizeWindow(WWindow *wwin, int directions, int head)
void handleMaximize(WWindow *wwin, int directions) void handleMaximize(WWindow *wwin, int directions)
{ {
int current = wwin->flags.maximized; int current = wwin->flags.maximized;
int requested = directions & (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS); int requested = directions & (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS | MAX_CENTRAL);
int effective = requested ^ current; int effective = requested ^ current;
int flags = directions & ~requested; int flags = directions & ~requested;
int head = wGetHeadForWindow(wwin); int head = wGetHeadForWindow(wwin);
@@ -625,11 +653,24 @@ void handleMaximize(WWindow *wwin, int directions)
head); head);
else { else {
if ((requested == (MAX_HORIZONTAL | MAX_VERTICAL)) || if ((requested == (MAX_HORIZONTAL | MAX_VERTICAL)) ||
(requested == MAX_MAXIMUS)) (requested == MAX_MAXIMUS))
effective = requested; effective = requested;
else { else {
if (requested & MAX_LEFTHALF) { if (requested & MAX_CENTRAL) {
effective |= MAX_CENTRAL;
if (current & (MAX_HORIZONTAL | MAX_VERTICAL))
effective &= ~(MAX_HORIZONTAL | MAX_VERTICAL);
else if (current & MAX_TOPHALF && current & MAX_LEFTHALF)
effective &= ~(MAX_TOPHALF | MAX_LEFTHALF);
else if (current & MAX_TOPHALF && current & MAX_RIGHTHALF)
effective &= ~(MAX_TOPHALF | MAX_RIGHTHALF);
else if (current & MAX_BOTTOMHALF && current & MAX_LEFTHALF)
effective &= ~(MAX_BOTTOMHALF | MAX_LEFTHALF);
else if (current & MAX_BOTTOMHALF && current & MAX_RIGHTHALF)
effective &= ~(MAX_BOTTOMHALF | MAX_RIGHTHALF);
} else if (requested & MAX_LEFTHALF) {
if (!(requested & (MAX_TOPHALF | MAX_BOTTOMHALF))) if (!(requested & (MAX_TOPHALF | MAX_BOTTOMHALF)))
effective |= MAX_VERTICAL; effective |= MAX_VERTICAL;
else else
@@ -2215,7 +2256,7 @@ void wMakeWindowVisible(WWindow *wwin)
} }
} }
void movePionterToWindowCenter(WWindow *wwin) void movePointerToWindowCenter(WWindow *wwin)
{ {
if (!wPreferences.pointer_with_half_max_windows) if (!wPreferences.pointer_with_half_max_windows)
return; return;
+4 -3
View File
@@ -30,8 +30,9 @@
#define MAX_TOPHALF (1 << 4) #define MAX_TOPHALF (1 << 4)
#define MAX_BOTTOMHALF (1 << 5) #define MAX_BOTTOMHALF (1 << 5)
#define MAX_MAXIMUS (1 << 6) #define MAX_MAXIMUS (1 << 6)
#define MAX_IGNORE_XINERAMA (1 << 7) #define MAX_CENTRAL (1 << 7)
#define MAX_KEYBOARD (1 << 8) #define MAX_IGNORE_XINERAMA (1 << 8)
#define MAX_KEYBOARD (1 << 9)
#define SAVE_GEOMETRY_X (1 << 0) #define SAVE_GEOMETRY_X (1 << 0)
#define SAVE_GEOMETRY_Y (1 << 1) #define SAVE_GEOMETRY_Y (1 << 1)
@@ -84,7 +85,7 @@ void wUnfullscreenWindow(WWindow *wwin);
void animateResize(WScreen *scr, int x, int y, int w, int h, int fx, int fy, int fw, int fh); void animateResize(WScreen *scr, int x, int y, int w, int h, int fx, int fy, int fw, int fh);
void update_saved_geometry(WWindow *wwin); void update_saved_geometry(WWindow *wwin);
void movePionterToWindowCenter(WWindow *wwin); void movePointerToWindowCenter(WWindow *wwin);
void moveBetweenHeads(WWindow *wwin, int direction); void moveBetweenHeads(WWindow *wwin, int direction);
#endif #endif
+1 -1
View File
@@ -2,7 +2,7 @@
* Window Maker window manager * Window Maker window manager
* *
* Copyright (c) 1998-2003 Alfredo K. Kojima * Copyright (c) 1998-2003 Alfredo K. Kojima
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2016 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
+2 -2
View File
@@ -240,9 +240,9 @@ void wClientConfigure(WWindow * wwin, XConfigureRequestEvent * xcre)
return; return;
if (nwidth != wwin->old_geometry.width) if (nwidth != wwin->old_geometry.width)
wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS); wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS | MAX_CENTRAL);
if (nheight != wwin->old_geometry.height) if (nheight != wwin->old_geometry.height)
wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS); wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS | MAX_CENTRAL);
wWindowConstrainSize(wwin, (unsigned int *)&nwidth, (unsigned int *)&nheight); wWindowConstrainSize(wwin, (unsigned int *)&nwidth, (unsigned int *)&nheight);
wWindowConfigure(wwin, nx, ny, nwidth, nheight); wWindowConfigure(wwin, nx, ny, nwidth, nheight);
+49
View File
@@ -25,7 +25,56 @@ static unsigned char MENU_SHADE_INDICATOR_XBM_DATA[] = {
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
#define MENU_SNAP_INDICATOR_W_XBM_SIZE 10
#define MENU_SNAP_INDICATOR_H_XBM_SIZE 9
static unsigned char MENU_SNAP_V_INDICATOR_XBM_DATA[] = {
0xff, 0x03, 0x1d, 0x02, 0x1d, 0x02, 0x1d, 0x02, 0x1d, 0x02, 0x1d, 0x02,
0x1d, 0x02, 0x1d, 0x02, 0xff, 0x03 };
static unsigned char MENU_SNAP_H_INDICATOR_XBM_DATA[] = {
0xff, 0x03, 0x01, 0x02, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0x01, 0x02,
0x01, 0x02, 0x01, 0x02, 0xff, 0x03 };
static unsigned char MENU_CENTRAL_INDICATOR_XBM_DATA[] = {
0xff, 0x03, 0x01, 0x02, 0x79, 0x02, 0x79, 0x02, 0x79, 0x02, 0x79, 0x02,
0x79, 0x02, 0x01, 0x02, 0xff, 0x03 };
static unsigned char MENU_SNAP_RH_INDICATOR_XBM_DATA[] = {
0xff, 0x03, 0x01, 0x02, 0xe1, 0x02, 0xe1, 0x02, 0xe1, 0x02, 0xe1, 0x02,
0xe1, 0x02, 0x01, 0x02, 0xff, 0x03 };
static unsigned char MENU_SNAP_LH_INDICATOR_XBM_DATA[] = {
0xff, 0x03, 0x01, 0x02, 0x1d, 0x02, 0x1d, 0x02, 0x1d, 0x02, 0x1d, 0x02,
0x1d, 0x02, 0x01, 0x02, 0xff, 0x03 };
static unsigned char MENU_SNAP_TH_INDICATOR_XBM_DATA[] = {
0xff, 0x03, 0x01, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0x01, 0x02,
0x01, 0x02, 0x01, 0x02, 0xff, 0x03 };
static unsigned char MENU_SNAP_BH_INDICATOR_XBM_DATA[] = {
0xff, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0x01, 0x02, 0xff, 0x03 };
static unsigned char MENU_SNAP_TL_INDICATOR_XBM_DATA[] = {
0xff, 0x03, 0x1f, 0x02, 0x1f, 0x02, 0x1f, 0x02, 0x01, 0x02, 0x01, 0x02,
0x01, 0x02, 0x01, 0x02, 0xff, 0x03 };
static unsigned char MENU_SNAP_TR_INDICATOR_XBM_DATA[] = {
0xff, 0x03, 0xe1, 0x03, 0xe1, 0x03, 0xe1, 0x03, 0x01, 0x02, 0x01, 0x02,
0x01, 0x02, 0x01, 0x02, 0xff, 0x03 };
static unsigned char MENU_SNAP_BL_INDICATOR_XBM_DATA[] = {
0xff, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x1f, 0x02,
0x1f, 0x02, 0x1f, 0x02, 0xff, 0x03 };
static unsigned char MENU_SNAP_BR_INDICATOR_XBM_DATA[] = {
0xff, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xe1, 0x03,
0xe1, 0x03, 0xe1, 0x03, 0xff, 0x03 };
static unsigned char MENU_SNAP_TILED_INDICATOR_XBM_DATA[] = {
0xff, 0x03, 0x1f, 0x02, 0x1f, 0x02, 0x1f, 0x02, 0x1f, 0x02, 0x1f, 0x02,
0xdf, 0x03, 0xdf, 0x03, 0xff, 0x03 };
/* button pixmaps */ /* button pixmaps */
/* the first one is for normal state, the second is for when /* the first one is for normal state, the second is for when
+53 -5
View File
@@ -4,7 +4,7 @@
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 1998-2003 Dan Pascu * Copyright (c) 1998-2003 Dan Pascu
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2023 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -151,6 +151,7 @@ static WDECallbackUpdate setSwPOptions;
static WDECallbackUpdate updateUsableArea; static WDECallbackUpdate updateUsableArea;
static WDECallbackUpdate setModifierKeyLabels; static WDECallbackUpdate setModifierKeyLabels;
static WDECallbackUpdate setHotCornerActions;
static WDECallbackConvert getCursor; static WDECallbackConvert getCursor;
static WDECallbackUpdate setCursor; static WDECallbackUpdate setCursor;
@@ -525,6 +526,14 @@ WDefaultEntry optionList[] = {
{"KeepDockOnPrimaryHead", "NO", NULL, {"KeepDockOnPrimaryHead", "NO", NULL,
&wPreferences.keep_dock_on_primary_head, getBool, updateDock, &wPreferences.keep_dock_on_primary_head, getBool, updateDock,
NULL, NULL}, NULL, NULL},
{"HotCorners", "NO", NULL,
&wPreferences.hot_corners, getBool, NULL, NULL, NULL},
{"HotCornerDelay", "250", (void *)&wPreferences.hot_corner_delay,
&wPreferences.hot_corner_delay, getInt, NULL, NULL, NULL},
{"HotCornerEdge", "2", (void *)&wPreferences.hot_corner_edge,
&wPreferences.hot_corner_edge, getInt, NULL, NULL, NULL},
{"HotCornerActions", "(\"None\", \"None\", \"None\", \"None\")", &wPreferences,
NULL, getPropList, setHotCornerActions, NULL, NULL},
/* style options */ /* style options */
@@ -662,16 +671,18 @@ WDefaultEntry optionList[] = {
NULL, getKeybind, setKeyGrab, NULL, NULL}, NULL, getKeybind, setKeyGrab, NULL, NULL},
{"BHMaximizeKey", "None", (void*)WKBD_BHMAXIMIZE, {"BHMaximizeKey", "None", (void*)WKBD_BHMAXIMIZE,
NULL, getKeybind, setKeyGrab, NULL, NULL}, NULL, getKeybind, setKeyGrab, NULL, NULL},
{"LTCMaximizeKey", "None", (void*)WKBD_LTCMAXIMIZE, {"TLCMaximizeKey", "None", (void*)WKBD_LTCMAXIMIZE,
NULL, getKeybind, setKeyGrab, NULL, NULL}, NULL, getKeybind, setKeyGrab, NULL, NULL},
{"RTCMaximizeKey", "None", (void*)WKBD_RTCMAXIMIZE, {"TRCMaximizeKey", "None", (void*)WKBD_RTCMAXIMIZE,
NULL, getKeybind, setKeyGrab, NULL, NULL}, NULL, getKeybind, setKeyGrab, NULL, NULL},
{"LBCMaximizeKey", "None", (void*)WKBD_LBCMAXIMIZE, {"BLCMaximizeKey", "None", (void*)WKBD_LBCMAXIMIZE,
NULL, getKeybind, setKeyGrab, NULL, NULL}, NULL, getKeybind, setKeyGrab, NULL, NULL},
{"RBCMaximizeKey", "None", (void*)WKBD_RBCMAXIMIZE, {"BRCMaximizeKey", "None", (void*)WKBD_RBCMAXIMIZE,
NULL, getKeybind, setKeyGrab, NULL, NULL}, NULL, getKeybind, setKeyGrab, NULL, NULL},
{"MaximusKey", "None", (void*)WKBD_MAXIMUS, {"MaximusKey", "None", (void*)WKBD_MAXIMUS,
NULL, getKeybind, setKeyGrab, NULL, NULL}, NULL, getKeybind, setKeyGrab, NULL, NULL},
{"CenterKey", "None", (void *)WKBD_CENTRAL,
NULL, getKeybind, setKeyGrab, NULL, NULL},
{"KeepOnTopKey", "None", (void *)WKBD_KEEP_ON_TOP, {"KeepOnTopKey", "None", (void *)WKBD_KEEP_ON_TOP,
NULL, getKeybind, setKeyGrab, NULL, NULL}, NULL, getKeybind, setKeyGrab, NULL, NULL},
{"KeepAtBottomKey", "None", (void *)WKBD_KEEP_AT_BOTTOM, {"KeepAtBottomKey", "None", (void *)WKBD_KEEP_AT_BOTTOM,
@@ -3461,6 +3472,43 @@ static int setModifierKeyLabels(WScreen * scr, WDefaultEntry * entry, void *tdat
return 0; return 0;
} }
static int setHotCornerActions(WScreen * scr, WDefaultEntry * entry, void *tdata, void *foo)
{
WMPropList *array = tdata;
int i;
struct WPreferences *prefs = foo;
if (!WMIsPLArray(array) || WMGetPropListItemCount(array) != 4) {
wwarning(_("Value for option \"%s\" must be an array of 4 strings"), entry->key);
WMReleasePropList(array);
return 0;
}
DestroyWindowMenu(scr);
for (i = 0; i < 4; i++) {
if (prefs->hot_corner_actions[i])
wfree(prefs->hot_corner_actions[i]);
if (WMIsPLString(WMGetFromPLArray(array, i))) {
const char *val;
val = WMGetFromPLString(WMGetFromPLArray(array, i));
if (strcasecmp(val, "NONE") != 0)
prefs->hot_corner_actions[i] = wstrdup(val);
else
prefs->hot_corner_actions[i] = NULL;
} else {
wwarning(_("Invalid argument for option \"%s\" item %d"), entry->key, i);
prefs->hot_corner_actions[i] = NULL;
}
}
WMReleasePropList(array);
return 0;
}
static int setDoubleClick(WScreen *scr, WDefaultEntry *entry, void *tdata, void *foo) static int setDoubleClick(WScreen *scr, WDefaultEntry *entry, void *tdata, void *foo)
{ {
int *value = tdata; int *value = tdata;
+5 -1
View File
@@ -4,7 +4,7 @@
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 1998-2003 Dan Pascu * Copyright (c) 1998-2003 Dan Pascu
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2023 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -1383,6 +1383,10 @@ void wShowInfoPanel(WScreen *scr)
case 32: case 32:
strbuf = wstrappend(strbuf, _("(16 million colors)\n")); strbuf = wstrappend(strbuf, _("(16 million colors)\n"));
break; break;
case 30:
case 40:
strbuf = wstrappend(strbuf, _("(1 billion colors)\n"));
break;
default: default:
snprintf(buffer, sizeof(buffer), _("(%d colors)\n"), 1 << scr->w_depth); snprintf(buffer, sizeof(buffer), _("(%d colors)\n"), 1 << scr->w_depth);
strbuf = wstrappend(strbuf, buffer); strbuf = wstrappend(strbuf, buffer);
+12 -2
View File
@@ -4,6 +4,7 @@
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 1998-2003 Dan Pascu * Copyright (c) 1998-2003 Dan Pascu
* Copyright (c) 2009-2023 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -3038,7 +3039,6 @@ void wDockSwap(WDock *dock)
WAppIcon *btn; WAppIcon *btn;
int x, i; int x, i;
x = getDockXPosition(scr, dock->on_right_side); x = getDockXPosition(scr, dock->on_right_side);
swapDrawers(scr, x); swapDrawers(scr, x);
dock->x_pos = x; dock->x_pos = x;
@@ -4619,7 +4619,10 @@ static void swapDrawer(WDock *drawer, int new_x)
ai = drawer->icon_array[i]; ai = drawer->icon_array[i];
if (ai == NULL) if (ai == NULL)
continue; continue;
ai->xindex *= -1; /* so A B C becomes C B A */ if (drawer->on_right_side)
ai->xindex = -abs(ai->xindex);
else
ai->xindex = abs(ai->xindex);
ai->x_pos = new_x + ai->xindex * ICON_SIZE; ai->x_pos = new_x + ai->xindex * ICON_SIZE;
/* Update drawer's tile */ /* Update drawer's tile */
@@ -4923,6 +4926,13 @@ static WDock * drawerRestoreState(WScreen *scr, WMPropList *drawer_state)
drawer->icon_array[drawer->icon_count] = aicon; drawer->icon_array[drawer->icon_count] = aicon;
if (aicon) { if (aicon) {
/* don't trust the stored direction sign as the dock is
* dynamically positioned depending on the screen size
*/
if (drawer->screen_ptr->dock->on_right_side)
aicon->xindex = -abs(aicon->xindex);
else
aicon->xindex = abs(aicon->xindex);
aicon->dock = drawer; aicon->dock = drawer;
aicon->x_pos = drawer->x_pos + (aicon->xindex * ICON_SIZE); aicon->x_pos = drawer->x_pos + (aicon->xindex * ICON_SIZE);
aicon->y_pos = drawer->y_pos + (aicon->yindex * ICON_SIZE); aicon->y_pos = drawer->y_pos + (aicon->yindex * ICON_SIZE);
+107 -22
View File
@@ -3,7 +3,7 @@
* Window Maker window manager * Window Maker window manager
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2023 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -1512,7 +1512,15 @@ static void handleKeyPress(XEvent * event)
CloseWindowMenu(scr); CloseWindowMenu(scr);
handleMaximize(wwin, MAX_HORIZONTAL | MAX_KEYBOARD); handleMaximize(wwin, MAX_HORIZONTAL | MAX_KEYBOARD);
movePionterToWindowCenter(wwin); movePointerToWindowCenter(wwin);
}
break;
case WKBD_CENTRAL:
if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) {
CloseWindowMenu(scr);
handleMaximize(wwin, MAX_CENTRAL | MAX_KEYBOARD);
movePointerToWindowCenter(wwin);
} }
break; break;
case WKBD_LHMAXIMIZE: case WKBD_LHMAXIMIZE:
@@ -1520,7 +1528,7 @@ static void handleKeyPress(XEvent * event)
CloseWindowMenu(scr); CloseWindowMenu(scr);
handleMaximize(wwin, MAX_VERTICAL | MAX_LEFTHALF | MAX_KEYBOARD); handleMaximize(wwin, MAX_VERTICAL | MAX_LEFTHALF | MAX_KEYBOARD);
movePionterToWindowCenter(wwin); movePointerToWindowCenter(wwin);
} }
break; break;
case WKBD_RHMAXIMIZE: case WKBD_RHMAXIMIZE:
@@ -1528,7 +1536,7 @@ static void handleKeyPress(XEvent * event)
CloseWindowMenu(scr); CloseWindowMenu(scr);
handleMaximize(wwin, MAX_VERTICAL | MAX_RIGHTHALF | MAX_KEYBOARD); handleMaximize(wwin, MAX_VERTICAL | MAX_RIGHTHALF | MAX_KEYBOARD);
movePionterToWindowCenter(wwin); movePointerToWindowCenter(wwin);
} }
break; break;
case WKBD_THMAXIMIZE: case WKBD_THMAXIMIZE:
@@ -1536,7 +1544,7 @@ static void handleKeyPress(XEvent * event)
CloseWindowMenu(scr); CloseWindowMenu(scr);
handleMaximize(wwin, MAX_HORIZONTAL | MAX_TOPHALF | MAX_KEYBOARD); handleMaximize(wwin, MAX_HORIZONTAL | MAX_TOPHALF | MAX_KEYBOARD);
movePionterToWindowCenter(wwin); movePointerToWindowCenter(wwin);
} }
break; break;
case WKBD_BHMAXIMIZE: case WKBD_BHMAXIMIZE:
@@ -1544,7 +1552,7 @@ static void handleKeyPress(XEvent * event)
CloseWindowMenu(scr); CloseWindowMenu(scr);
handleMaximize(wwin, MAX_HORIZONTAL | MAX_BOTTOMHALF | MAX_KEYBOARD); handleMaximize(wwin, MAX_HORIZONTAL | MAX_BOTTOMHALF | MAX_KEYBOARD);
movePionterToWindowCenter(wwin); movePointerToWindowCenter(wwin);
} }
break; break;
case WKBD_LTCMAXIMIZE: case WKBD_LTCMAXIMIZE:
@@ -1552,7 +1560,7 @@ static void handleKeyPress(XEvent * event)
CloseWindowMenu(scr); CloseWindowMenu(scr);
handleMaximize(wwin, MAX_LEFTHALF | MAX_TOPHALF | MAX_KEYBOARD); handleMaximize(wwin, MAX_LEFTHALF | MAX_TOPHALF | MAX_KEYBOARD);
movePionterToWindowCenter(wwin); movePointerToWindowCenter(wwin);
} }
break; break;
case WKBD_RTCMAXIMIZE: case WKBD_RTCMAXIMIZE:
@@ -1560,7 +1568,7 @@ static void handleKeyPress(XEvent * event)
CloseWindowMenu(scr); CloseWindowMenu(scr);
handleMaximize(wwin, MAX_RIGHTHALF | MAX_TOPHALF | MAX_KEYBOARD); handleMaximize(wwin, MAX_RIGHTHALF | MAX_TOPHALF | MAX_KEYBOARD);
movePionterToWindowCenter(wwin); movePointerToWindowCenter(wwin);
} }
break; break;
case WKBD_LBCMAXIMIZE: case WKBD_LBCMAXIMIZE:
@@ -1568,7 +1576,7 @@ static void handleKeyPress(XEvent * event)
CloseWindowMenu(scr); CloseWindowMenu(scr);
handleMaximize(wwin, MAX_LEFTHALF | MAX_BOTTOMHALF | MAX_KEYBOARD); handleMaximize(wwin, MAX_LEFTHALF | MAX_BOTTOMHALF | MAX_KEYBOARD);
movePionterToWindowCenter(wwin); movePointerToWindowCenter(wwin);
} }
break; break;
case WKBD_RBCMAXIMIZE: case WKBD_RBCMAXIMIZE:
@@ -1576,7 +1584,7 @@ static void handleKeyPress(XEvent * event)
CloseWindowMenu(scr); CloseWindowMenu(scr);
handleMaximize(wwin, MAX_RIGHTHALF | MAX_BOTTOMHALF | MAX_KEYBOARD); handleMaximize(wwin, MAX_RIGHTHALF | MAX_BOTTOMHALF | MAX_KEYBOARD);
movePionterToWindowCenter(wwin); movePointerToWindowCenter(wwin);
} }
break; break;
case WKBD_MAXIMUS: case WKBD_MAXIMUS:
@@ -1928,27 +1936,104 @@ static void handleKeyPress(XEvent * event)
} }
} }
static void handleMotionNotify(XEvent * event) #define CORNER_NONE 0
{ #define CORNER_TOPLEFT 1
WScreen *scr = wScreenForRootWindow(event->xmotion.root); #define CORNER_TOPRIGHT 2
#define CORNER_BOTTOMLEFT 3
#define CORNER_BOTTOMRIGHT 4
if (wPreferences.scrollable_menus) { static int get_corner(WMRect rect, WMPoint p)
{
if (p.x <= (rect.pos.x + wPreferences.hot_corner_edge) && p.y <= (rect.pos.y + wPreferences.hot_corner_edge))
return CORNER_TOPLEFT;
if (p.x >= (rect.pos.x + rect.size.width - wPreferences.hot_corner_edge) && p.y <= (rect.pos.y + wPreferences.hot_corner_edge))
return CORNER_TOPRIGHT;
if (p.x <= (rect.pos.x + wPreferences.hot_corner_edge) && p.y >= (rect.pos.y + rect.size.height - wPreferences.hot_corner_edge))
return CORNER_BOTTOMLEFT;
if (p.x >= (rect.pos.x + rect.size.width - wPreferences.hot_corner_edge) && p.y >= (rect.pos.y + rect.size.height - wPreferences.hot_corner_edge))
return CORNER_BOTTOMRIGHT;
return CORNER_NONE;
}
static void hotCornerDelay(void *data)
{
WScreen *scr = (WScreen *) data;
if (scr->flags.in_hot_corner && wPreferences.hot_corner_actions[scr->flags.in_hot_corner - 1])
ExecuteShellCommand(scr, wPreferences.hot_corner_actions[scr->flags.in_hot_corner - 1]);
WMDeleteTimerHandler(scr->hot_corner_timer);
scr->hot_corner_timer = NULL;
}
static void handleMotionNotify(XEvent *event)
{
if (wPreferences.scrollable_menus || wPreferences.hot_corners) {
WScreen *scr = wScreenForRootWindow(event->xmotion.root);
WMPoint p = wmkpoint(event->xmotion.x_root, event->xmotion.y_root); WMPoint p = wmkpoint(event->xmotion.x_root, event->xmotion.y_root);
WMRect rect = wGetRectForHead(scr, wGetHeadForPoint(scr, p)); WMRect rect = wGetRectForHead(scr, wGetHeadForPoint(scr, p));
if (scr->flags.jump_back_pending || if (wPreferences.hot_corners) {
p.x <= (rect.pos.x + 1) || if (!scr->flags.in_hot_corner) {
p.x >= (rect.pos.x + rect.size.width - 2) || scr->flags.in_hot_corner = get_corner(rect, p);
p.y <= (rect.pos.y + 1) || p.y >= (rect.pos.y + rect.size.height - 2)) { if (scr->flags.in_hot_corner && !scr->hot_corner_timer)
WMenu *menu; scr->hot_corner_timer = WMAddTimerHandler(wPreferences.hot_corner_delay, hotCornerDelay, scr);
} else {
int out_hot_corner = 0;
menu = wMenuUnderPointer(scr); switch (scr->flags.in_hot_corner) {
if (menu != NULL) case CORNER_TOPLEFT:
wMenuScroll(menu); if ((p.x > (rect.pos.x + wPreferences.hot_corner_edge)) ||
(p.y > (rect.pos.y + wPreferences.hot_corner_edge)))
out_hot_corner = 1;
break;
case CORNER_TOPRIGHT:
if ((p.x < (rect.pos.x + rect.size.width - wPreferences.hot_corner_edge)) ||
(p.y > (rect.pos.y + wPreferences.hot_corner_edge)))
out_hot_corner = 1;
break;
case CORNER_BOTTOMLEFT:
if ((p.x > (rect.pos.x + wPreferences.hot_corner_edge)) ||
(p.y < (rect.pos.y + rect.size.height - wPreferences.hot_corner_edge)))
out_hot_corner = 1;
break;
case CORNER_BOTTOMRIGHT:
if ((p.x < (rect.pos.x + rect.size.width - wPreferences.hot_corner_edge)) ||
(p.y < (rect.pos.y + rect.size.height - wPreferences.hot_corner_edge)))
out_hot_corner = 1;
break;
}
if (out_hot_corner) {
scr->flags.in_hot_corner = CORNER_NONE;
if (scr->hot_corner_timer) {
WMDeleteTimerHandler(scr->hot_corner_timer);
scr->hot_corner_timer = NULL;
}
}
}
}
if (wPreferences.scrollable_menus) {
if (scr->flags.jump_back_pending ||
p.x <= (rect.pos.x + 1) ||
p.x >= (rect.pos.x + rect.size.width - 2) ||
p.y <= (rect.pos.y + 1) || p.y >= (rect.pos.y + rect.size.height - 2)) {
WMenu *menu;
menu = wMenuUnderPointer(scr);
if (menu != NULL)
wMenuScroll(menu);
}
} }
} }
} }
#undef CORNER_NONE
#undef CORNER_TOPLEFT
#undef CORNER_TOPRIGHT
#undef CORNER_BOTTOMLEFT
#undef CORNER_BOTTOMRIGHT
static void handleVisibilityNotify(XEvent * event) static void handleVisibilityNotify(XEvent * event)
{ {
WWindow *wwin; WWindow *wwin;
+2 -1
View File
@@ -2,7 +2,7 @@
* Window Maker window manager * Window Maker window manager
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2023 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -76,6 +76,7 @@ enum {
WKBD_FOCUSPREV, WKBD_FOCUSPREV,
WKBD_GROUPNEXT, WKBD_GROUPNEXT,
WKBD_GROUPPREV, WKBD_GROUPPREV,
WKBD_CENTRAL,
/* window, menu */ /* window, menu */
WKBD_CLOSE, WKBD_CLOSE,
+63 -23
View File
@@ -724,9 +724,12 @@ static void paintEntry(WMenu * menu, int index, int selected)
/* draw indicator */ /* draw indicator */
if (entry->flags.indicator && entry->flags.indicator_on) { if (entry->flags.indicator && entry->flags.indicator_on) {
int iw, ih; int iw, ih;
WPixmap *indicator; WPixmap *indicator = NULL;
switch (entry->flags.indicator_type) { switch (entry->flags.indicator_type) {
case MI_DIAMOND:
indicator = scr->menu_radio_indicator;
break;
case MI_CHECK: case MI_CHECK:
indicator = scr->menu_check_indicator; indicator = scr->menu_check_indicator;
break; break;
@@ -739,35 +742,72 @@ static void paintEntry(WMenu * menu, int index, int selected)
case MI_SHADED: case MI_SHADED:
indicator = scr->menu_shade_indicator; indicator = scr->menu_shade_indicator;
break; break;
case MI_DIAMOND: case MI_SNAP_V:
indicator = scr->menu_snap_vertical_indicator;
break;
case MI_SNAP_H:
indicator = scr->menu_snap_horizontal_indicator;
break;
case MI_CENTRAL:
indicator = scr->menu_central_indicator;
break;
case MI_SNAP_RH:
indicator = scr->menu_snap_rh_indicator;
break;
case MI_SNAP_LH:
indicator = scr->menu_snap_lh_indicator;
break;
case MI_SNAP_TH:
indicator = scr->menu_snap_th_indicator;
break;
case MI_SNAP_BH:
indicator = scr->menu_snap_bh_indicator;
break;
case MI_SNAP_TL:
indicator = scr->menu_snap_tl_indicator;
break;
case MI_SNAP_TR:
indicator = scr->menu_snap_tr_indicator;
break;
case MI_SNAP_BL:
indicator = scr->menu_snap_bl_indicator;
break;
case MI_SNAP_BR:
indicator = scr->menu_snap_br_indicator;
break;
case MI_SNAP_TILED:
indicator = scr->menu_snap_tiled_indicator;
break;
case MI_NONE:
default: default:
indicator = scr->menu_radio_indicator;
break; break;
} }
iw = indicator->width; if (indicator) {
ih = indicator->height; iw = indicator->width;
XSetClipMask(dpy, scr->copy_gc, indicator->mask); ih = indicator->height;
XSetClipOrigin(dpy, scr->copy_gc, 5, y + (h - ih) / 2); XSetClipMask(dpy, scr->copy_gc, indicator->mask);
if (selected) { XSetClipOrigin(dpy, scr->copy_gc, 5, y + (h - ih) / 2);
if (entry->flags.enabled) { if (selected) {
XSetForeground(dpy, scr->copy_gc, WMColorPixel(scr->select_text_color)); if (entry->flags.enabled) {
XSetForeground(dpy, scr->copy_gc, WMColorPixel(scr->select_text_color));
} else {
XSetForeground(dpy, scr->copy_gc, WMColorPixel(scr->dtext_color));
}
} else { } else {
XSetForeground(dpy, scr->copy_gc, WMColorPixel(scr->dtext_color)); if (entry->flags.enabled) {
} XSetForeground(dpy, scr->copy_gc, WMColorPixel(scr->mtext_color));
} else { } else {
if (entry->flags.enabled) { XSetForeground(dpy, scr->copy_gc, WMColorPixel(scr->dtext_color));
XSetForeground(dpy, scr->copy_gc, WMColorPixel(scr->mtext_color)); }
} else {
XSetForeground(dpy, scr->copy_gc, WMColorPixel(scr->dtext_color));
} }
XFillRectangle(dpy, win, scr->copy_gc, 5, y + (h - ih) / 2, iw, ih);
/*
XCopyArea(dpy, indicator->image, win, scr->copy_gc, 0, 0,
iw, ih, 5, y+(h-ih)/2);
*/
XSetClipOrigin(dpy, scr->copy_gc, 0, 0);
} }
XFillRectangle(dpy, win, scr->copy_gc, 5, y + (h - ih) / 2, iw, ih);
/*
XCopyArea(dpy, indicator->image, win, scr->copy_gc, 0, 0,
iw, ih, 5, y+(h-ih)/2);
*/
XSetClipOrigin(dpy, scr->copy_gc, 0, 0);
} }
/* draw right text */ /* draw right text */
+19 -6
View File
@@ -23,11 +23,24 @@
#include "wcore.h" #include "wcore.h"
#define MI_DIAMOND 0 #define MI_NONE 0
#define MI_CHECK 1 #define MI_DIAMOND 1
#define MI_MINIWINDOW 2 #define MI_CHECK 2
#define MI_HIDDEN 3 #define MI_MINIWINDOW 3
#define MI_SHADED 4 #define MI_HIDDEN 4
#define MI_SHADED 5
#define MI_SNAP_V 6
#define MI_SNAP_H 7
#define MI_SNAP_RH 8
#define MI_SNAP_LH 9
#define MI_SNAP_TH 10
#define MI_SNAP_BH 11
#define MI_SNAP_TL 12
#define MI_SNAP_TR 13
#define MI_SNAP_BL 14
#define MI_SNAP_BR 15
#define MI_SNAP_TILED 16
#define MI_CENTRAL 17
typedef struct WMenuEntry { typedef struct WMenuEntry {
int order; int order;
@@ -44,7 +57,7 @@ typedef struct WMenuEntry {
unsigned int enabled:1; /* entry is selectable */ unsigned int enabled:1; /* entry is selectable */
unsigned int indicator:1; /* left indicator */ unsigned int indicator:1; /* left indicator */
unsigned int indicator_on:1; unsigned int indicator_on:1;
unsigned int indicator_type:3; unsigned int indicator_type:5;
unsigned int editable:1; unsigned int editable:1;
} flags; } flags;
} WMenuEntry; } WMenuEntry;
+1 -1
View File
@@ -2,7 +2,7 @@
* Window Maker window manager * Window Maker window manager
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 2013 Window Maker Team * Copyright (c) 2013-2023 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
+2 -2
View File
@@ -62,7 +62,7 @@ typedef struct {
long functions; long functions;
long decorations; long decorations;
long inputMode; long inputMode;
long unknown; long status;
} MWMHints; } MWMHints;
static Atom _XA_MOTIF_WM_HINTS; static Atom _XA_MOTIF_WM_HINTS;
@@ -180,7 +180,7 @@ static int getMWMHints(Window window, MWMHints *mwmhints)
mwmhints->decorations = data[2]; mwmhints->decorations = data[2];
mwmhints->inputMode = data[3]; mwmhints->inputMode = data[3];
if (count > 5) if (count > 5)
mwmhints->unknown = data[4]; mwmhints->status = data[4];
} }
XFree(data); XFree(data);
+4 -4
View File
@@ -1665,10 +1665,10 @@ int wKeyboardMoveResizeWindow(WWindow * wwin)
} }
} else { } else {
if (ww != original_w) if (ww != original_w)
wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS); wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS | MAX_CENTRAL);
if (wh != original_h) if (wh != original_h)
wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS); wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS | MAX_CENTRAL);
wWindowConfigure(wwin, src_x + off_x, src_y + off_y, ww, wh - vert_border); wWindowConfigure(wwin, src_x + off_x, src_y + off_y, ww, wh - vert_border);
wWindowSynthConfigureNotify(wwin); wWindowSynthConfigureNotify(wwin);
@@ -2283,10 +2283,10 @@ void wMouseResizeWindow(WWindow * wwin, XEvent * ev)
XUngrabServer(dpy); XUngrabServer(dpy);
if (fw != original_fw) if (fw != original_fw)
wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS); wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS | MAX_CENTRAL);
if (fh != original_fh) if (fh != original_fh)
wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS); wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS | MAX_CENTRAL);
wWindowConfigure(wwin, fx, fy, fw, fh - vert_border); wWindowConfigure(wwin, fx, fy, fw, fh - vert_border);
wWindowSynthConfigureNotify(wwin); wWindowSynthConfigureNotify(wwin);
+1 -1
View File
@@ -3,7 +3,7 @@
* Window Maker window manager * Window Maker window manager
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 2013 Window Maker Team * Copyright (c) 2013-2016 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -4,7 +4,7 @@
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 1998-2003 Dan Pascu * Copyright (c) 1998-2003 Dan Pascu
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2023 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
+29 -40
View File
@@ -484,45 +484,34 @@ static void createPixmaps(WScreen * scr)
WPixmap *pix; WPixmap *pix;
/* load pixmaps */ /* load pixmaps */
pix = wPixmapCreateFromXBMData(scr, (char *)MENU_RADIO_INDICATOR_XBM_DATA, #define LOADPIXMAPINDICATOR(XBM,W,I) {\
(char *)MENU_RADIO_INDICATOR_XBM_DATA, pix = wPixmapCreateFromXBMData(scr, (char *)XBM, (char *)XBM,\
MENU_RADIO_INDICATOR_XBM_SIZE, W, MENU_SNAP_INDICATOR_H_XBM_SIZE,\
MENU_RADIO_INDICATOR_XBM_SIZE, scr->black_pixel, scr->white_pixel); scr->black_pixel, scr->white_pixel);\
if (pix != NULL) if (pix != NULL)\
pix->shared = 1; pix->shared = 1;\
scr->menu_radio_indicator = pix; scr->I = pix;}
pix = wPixmapCreateFromXBMData(scr, (char *)MENU_CHECK_INDICATOR_XBM_DATA, LOADPIXMAPINDICATOR(MENU_RADIO_INDICATOR_XBM_DATA, MENU_RADIO_INDICATOR_XBM_SIZE, menu_radio_indicator)
(char *)MENU_CHECK_INDICATOR_XBM_DATA, LOADPIXMAPINDICATOR(MENU_CHECK_INDICATOR_XBM_DATA, MENU_CHECK_INDICATOR_XBM_SIZE, menu_check_indicator)
MENU_CHECK_INDICATOR_XBM_SIZE, LOADPIXMAPINDICATOR(MENU_MINI_INDICATOR_XBM_DATA, MENU_MINI_INDICATOR_XBM_SIZE, menu_mini_indicator)
MENU_CHECK_INDICATOR_XBM_SIZE, scr->black_pixel, scr->white_pixel); LOADPIXMAPINDICATOR(MENU_HIDE_INDICATOR_XBM_DATA, MENU_HIDE_INDICATOR_XBM_SIZE, menu_hide_indicator)
if (pix != NULL) LOADPIXMAPINDICATOR(MENU_SHADE_INDICATOR_XBM_DATA, MENU_SHADE_INDICATOR_XBM_SIZE, menu_shade_indicator)
pix->shared = 1;
scr->menu_check_indicator = pix;
pix = wPixmapCreateFromXBMData(scr, (char *)MENU_MINI_INDICATOR_XBM_DATA, LOADPIXMAPINDICATOR(MENU_SNAP_V_INDICATOR_XBM_DATA, MENU_SNAP_INDICATOR_W_XBM_SIZE, menu_snap_vertical_indicator)
(char *)MENU_MINI_INDICATOR_XBM_DATA, LOADPIXMAPINDICATOR(MENU_SNAP_H_INDICATOR_XBM_DATA, MENU_SNAP_INDICATOR_W_XBM_SIZE, menu_snap_horizontal_indicator)
MENU_MINI_INDICATOR_XBM_SIZE, LOADPIXMAPINDICATOR(MENU_CENTRAL_INDICATOR_XBM_DATA, MENU_SNAP_INDICATOR_W_XBM_SIZE, menu_central_indicator)
MENU_MINI_INDICATOR_XBM_SIZE, scr->black_pixel, scr->white_pixel); LOADPIXMAPINDICATOR(MENU_SNAP_RH_INDICATOR_XBM_DATA, MENU_SNAP_INDICATOR_W_XBM_SIZE, menu_snap_rh_indicator)
if (pix != NULL) LOADPIXMAPINDICATOR(MENU_SNAP_LH_INDICATOR_XBM_DATA, MENU_SNAP_INDICATOR_W_XBM_SIZE, menu_snap_lh_indicator)
pix->shared = 1; LOADPIXMAPINDICATOR(MENU_SNAP_TH_INDICATOR_XBM_DATA, MENU_SNAP_INDICATOR_W_XBM_SIZE, menu_snap_th_indicator)
scr->menu_mini_indicator = pix; LOADPIXMAPINDICATOR(MENU_SNAP_BH_INDICATOR_XBM_DATA, MENU_SNAP_INDICATOR_W_XBM_SIZE, menu_snap_bh_indicator)
LOADPIXMAPINDICATOR(MENU_SNAP_TL_INDICATOR_XBM_DATA, MENU_SNAP_INDICATOR_W_XBM_SIZE, menu_snap_tl_indicator)
LOADPIXMAPINDICATOR(MENU_SNAP_TR_INDICATOR_XBM_DATA, MENU_SNAP_INDICATOR_W_XBM_SIZE, menu_snap_tr_indicator)
LOADPIXMAPINDICATOR(MENU_SNAP_BL_INDICATOR_XBM_DATA, MENU_SNAP_INDICATOR_W_XBM_SIZE, menu_snap_bl_indicator)
LOADPIXMAPINDICATOR(MENU_SNAP_BR_INDICATOR_XBM_DATA, MENU_SNAP_INDICATOR_W_XBM_SIZE, menu_snap_br_indicator)
LOADPIXMAPINDICATOR(MENU_SNAP_TILED_INDICATOR_XBM_DATA, MENU_SNAP_INDICATOR_W_XBM_SIZE, menu_snap_tiled_indicator)
pix = wPixmapCreateFromXBMData(scr, (char *)MENU_HIDE_INDICATOR_XBM_DATA, #undef LOADPIXMAPINDICATOR
(char *)MENU_HIDE_INDICATOR_XBM_DATA,
MENU_HIDE_INDICATOR_XBM_SIZE,
MENU_HIDE_INDICATOR_XBM_SIZE, scr->black_pixel, scr->white_pixel);
if (pix != NULL)
pix->shared = 1;
scr->menu_hide_indicator = pix;
pix = wPixmapCreateFromXBMData(scr, (char *)MENU_SHADE_INDICATOR_XBM_DATA,
(char *)MENU_SHADE_INDICATOR_XBM_DATA,
MENU_SHADE_INDICATOR_XBM_SIZE,
MENU_SHADE_INDICATOR_XBM_SIZE, scr->black_pixel, scr->white_pixel);
if (pix != NULL)
pix->shared = 1;
scr->menu_shade_indicator = pix;
create_logo_image(scr); create_logo_image(scr);
@@ -1304,8 +1293,11 @@ void ScreenCapture(WScreen *scr, int mode)
} }
switch (mode) { switch (mode) {
WWindow *wwin;
XImage *pimg;
case PRINT_WINDOW: case PRINT_WINDOW:
WWindow *wwin = scr->focused_window; wwin = scr->focused_window;
if (wwin && !wwin->flags.shaded) { if (wwin && !wwin->flags.shaded) {
/* /*
* check if hint WM_TAKE_FOCUS is set, if it's the case * check if hint WM_TAKE_FOCUS is set, if it's the case
@@ -1316,7 +1308,6 @@ void ScreenCapture(WScreen *scr, int mode)
} }
else { else {
/* we will only capture the visible window part */ /* we will only capture the visible window part */
XImage *pimg;
int x_crop = 0; int x_crop = 0;
int y_crop = 0; int y_crop = 0;
int w_crop = wwin->client.width; int w_crop = wwin->client.width;
@@ -1345,8 +1336,6 @@ void ScreenCapture(WScreen *scr, int mode)
} }
break; break;
case PRINT_PARTIAL: case PRINT_PARTIAL:
XImage *pimg;
pimg = imageCaptureArea(scr); pimg = imageCaptureArea(scr);
if (pimg) { if (pimg) {
img = RCreateImageFromXImage(scr->rcontext, pimg, None); img = RCreateImageFromXImage(scr->rcontext, pimg, None);
+16
View File
@@ -214,6 +214,19 @@ typedef struct _WScreen {
struct WPixmap *menu_mini_indicator; /* for miniwindow */ struct WPixmap *menu_mini_indicator; /* for miniwindow */
struct WPixmap *menu_hide_indicator; /* for hidden window */ struct WPixmap *menu_hide_indicator; /* for hidden window */
struct WPixmap *menu_shade_indicator; /* for shaded window */ struct WPixmap *menu_shade_indicator; /* for shaded window */
struct WPixmap *menu_snap_vertical_indicator; /* for vertical snap window */
struct WPixmap *menu_snap_horizontal_indicator; /* for horizontal snap window */
struct WPixmap *menu_snap_rh_indicator; /* for righ half snap window */
struct WPixmap *menu_snap_lh_indicator; /* for left half snap window */
struct WPixmap *menu_snap_th_indicator; /* for top half snap window */
struct WPixmap *menu_snap_bh_indicator; /* for bottom half snap window */
struct WPixmap *menu_snap_tl_indicator; /* for top left snap window */
struct WPixmap *menu_snap_tr_indicator; /* for top rigt snap window */
struct WPixmap *menu_snap_bl_indicator; /* for bottom left snap window */
struct WPixmap *menu_snap_br_indicator; /* for bottom right snap window */
struct WPixmap *menu_snap_tiled_indicator; /* for tiled window */
struct WPixmap *menu_central_indicator; /* for central window */
int app_menu_x, app_menu_y; /* position for application menus */ int app_menu_x, app_menu_y; /* position for application menus */
struct WMenu *root_menu; /* root window menu */ struct WMenu *root_menu; /* root window menu */
@@ -283,6 +296,8 @@ typedef struct _WScreen {
WMHandlerID *autoRaiseTimer; WMHandlerID *autoRaiseTimer;
Window autoRaiseWindow; /* window that is scheduled to be Window autoRaiseWindow; /* window that is scheduled to be
* raised */ * raised */
/* for hot-corners delay */
WMHandlerID *hot_corner_timer;
/* for window shortcuts */ /* for window shortcuts */
WMArray *shortcutWindows[MAX_WINDOW_SHORTCUTS]; WMArray *shortcutWindows[MAX_WINDOW_SHORTCUTS];
@@ -311,6 +326,7 @@ typedef struct _WScreen {
unsigned int doing_alt_tab:1; unsigned int doing_alt_tab:1;
unsigned int jump_back_pending:1; unsigned int jump_back_pending:1;
unsigned int ignore_focus_events:1; unsigned int ignore_focus_events:1;
unsigned int in_hot_corner:3;
} flags; } flags;
} WScreen; } WScreen;
+34 -33
View File
@@ -3,6 +3,7 @@
* Window Maker window manager * Window Maker window manager
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 2008-2023 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -1900,25 +1901,20 @@ void wWindowConstrainSize(WWindow *wwin, unsigned int *nwidth, unsigned int *nhe
int baseW = 0; int baseW = 0;
int baseH = 0; int baseH = 0;
/*
* X11 proto defines width and height as a CARD16
* if window size is guaranteed to fail, failsafe to a reasonable size
*/
if (width > USHRT_MAX && height > USHRT_MAX) {
width = 640;
height = 480;
return;
}
if (wwin->normal_hints) { if (wwin->normal_hints) {
if (!wwin->flags.maximized) { if (!wwin->flags.maximized) {
winc = wwin->normal_hints->width_inc; winc = wwin->normal_hints->width_inc;
hinc = wwin->normal_hints->height_inc; hinc = wwin->normal_hints->height_inc;
} }
minW = wwin->normal_hints->min_width; if (wwin->normal_hints->min_width > minW)
minH = wwin->normal_hints->min_height; minW = wwin->normal_hints->min_width;
maxW = wwin->normal_hints->max_width; if (wwin->normal_hints->min_height > minH)
maxH = wwin->normal_hints->max_height; minH = wwin->normal_hints->min_height;
if (wwin->normal_hints->max_width < maxW)
maxW = wwin->normal_hints->max_width;
if (wwin->normal_hints->max_height < maxH)
maxH = wwin->normal_hints->max_height;
if (wwin->normal_hints->flags & PAspect) { if (wwin->normal_hints->flags & PAspect) {
minAX = wwin->normal_hints->min_aspect.x; minAX = wwin->normal_hints->min_aspect.x;
minAY = wwin->normal_hints->min_aspect.y; minAY = wwin->normal_hints->min_aspect.y;
@@ -1937,11 +1933,14 @@ void wWindowConstrainSize(WWindow *wwin, unsigned int *nwidth, unsigned int *nhe
height = minH; height = minH;
/* if only one dimension is over the top, set a default 4/3 ratio */ /* if only one dimension is over the top, set a default 4/3 ratio */
if (width > maxW && height < maxH) { if (width > maxW && height < maxH)
width = height * 4 / 3; width = height * 4 / 3;
} else { else if(height > maxH && width < maxW)
if(height > maxH && width < maxW) height = width * 3 / 4;
height = width * 3 / 4; else if(width > maxW && height > maxH) {
/* if both are over the top, set size to almost fullscreen */
height = wwin->screen_ptr->scr_height - 2 * wPreferences.icon_size;
width = wwin->screen_ptr->scr_width - 2 * wPreferences.icon_size;
} }
/* aspect ratio code borrowed from olwm */ /* aspect ratio code borrowed from olwm */
@@ -2149,12 +2148,6 @@ void wWindowConfigure(WWindow *wwin, int req_x, int req_y, int req_width, int re
int resize; int resize;
resize = (req_width != wwin->client.width || req_height != wwin->client.height); resize = (req_width != wwin->client.width || req_height != wwin->client.height);
/*
* if the window is being moved but not resized then
* send a synthetic ConfigureNotify
*/
if ((req_x != wwin->frame_x || req_y != wwin->frame_y) && !resize)
synth_notify = True;
if (WFLAGP(wwin, dont_move_off)) if (WFLAGP(wwin, dont_move_off))
wScreenBringInside(wwin->screen_ptr, &req_x, &req_y, req_width, req_height); wScreenBringInside(wwin->screen_ptr, &req_x, &req_y, req_width, req_height);
@@ -2191,10 +2184,17 @@ void wWindowConfigure(WWindow *wwin, int req_x, int req_y, int req_width, int re
wwin->client.width = req_width; wwin->client.width = req_width;
wwin->client.height = req_height; wwin->client.height = req_height;
} else { } else {
wwin->client.x = req_x; if (req_x != wwin->frame_x || req_y != wwin->frame_y) {
wwin->client.y = req_y + wwin->frame->top_width; wwin->client.x = req_x;
wwin->client.y = req_y + wwin->frame->top_width;
XMoveWindow(dpy, wwin->frame->core->window, req_x, req_y); XMoveWindow(dpy, wwin->frame->core->window, req_x, req_y);
}
/*
* if the window is being moved but not resized
* or if we change nothing then
* send a synthetic ConfigureNotify
*/
synth_notify = True;
} }
wwin->frame_x = req_x; wwin->frame_x = req_x;
wwin->frame_y = req_y; wwin->frame_y = req_y;
@@ -2913,17 +2913,18 @@ static void titlebarDblClick(WCoreWindow *sender, void *data, XEvent *event)
} }
} }
if (wPreferences.double_click_fullscreen){ if (wPreferences.double_click_fullscreen) {
int dir = 0; int dir = 0;
if (event->xbutton.state == 0) { if (event->xbutton.state == 0) {
/* maximize window full screen*/ /* maximize window full screen*/
dir |= (MAX_VERTICAL|MAX_HORIZONTAL); dir |= (MAX_VERTICAL|MAX_HORIZONTAL);
int ndir = dir ^ wwin->flags.maximized; int ndir = dir ^ wwin->flags.maximized;
if (ndir != 0)
wMaximizeWindow(wwin, ndir, wGetHeadForWindow(wwin)); wMaximizeWindow(wwin, ndir, wGetHeadForWindow(wwin));
else
} wUnmaximizeWindow(wwin);
}
} else { } else {
int dir = 0; int dir = 0;
+2 -2
View File
@@ -251,8 +251,8 @@ typedef struct WWindow {
unsigned int miniaturized:1; unsigned int miniaturized:1;
unsigned int hidden:1; unsigned int hidden:1;
unsigned int shaded:1; unsigned int shaded:1;
unsigned int maximized:7; unsigned int maximized:10;
unsigned int old_maximized:7; unsigned int old_maximized:10;
unsigned int fullscreen:1; unsigned int fullscreen:1;
long fullscreen_monitors[4]; long fullscreen_monitors[4];
unsigned int omnipresent:1; unsigned int omnipresent:1;
+24 -14
View File
@@ -119,21 +119,23 @@ static const char *const menu_options_entries[] = {
* Defines the menu entries for the Other maximization sub-menu * Defines the menu entries for the Other maximization sub-menu
*/ */
static const struct { static const struct {
unsigned int indicator;
const char *label; const char *label;
unsigned int shortcut_idx; unsigned int shortcut_idx;
int maxim_direction; int maxim_direction;
} menu_maximize_entries[] = { } menu_maximize_entries[] = {
{ N_("Maximize vertically"), WKBD_VMAXIMIZE, MAX_VERTICAL }, { MI_SNAP_V, N_("Vertical"), WKBD_VMAXIMIZE, MAX_VERTICAL },
{ N_("Maximize horizontally"), WKBD_HMAXIMIZE, MAX_HORIZONTAL }, { MI_SNAP_H, N_("Horizontal"), WKBD_HMAXIMIZE, MAX_HORIZONTAL },
{ N_("Maximize left half"), WKBD_LHMAXIMIZE, MAX_VERTICAL | MAX_LEFTHALF }, { MI_CENTRAL, N_("Central"), WKBD_CENTRAL, MAX_CENTRAL },
{ N_("Maximize right half"), WKBD_RHMAXIMIZE, MAX_VERTICAL | MAX_RIGHTHALF }, { MI_SNAP_LH, N_("Left half"), WKBD_LHMAXIMIZE, MAX_VERTICAL | MAX_LEFTHALF },
{ N_("Maximize top half"), WKBD_THMAXIMIZE, MAX_HORIZONTAL | MAX_TOPHALF }, { MI_SNAP_RH, N_("Right half"), WKBD_RHMAXIMIZE, MAX_VERTICAL | MAX_RIGHTHALF },
{ N_("Maximize bottom half"), WKBD_BHMAXIMIZE, MAX_HORIZONTAL | MAX_BOTTOMHALF }, { MI_SNAP_TH, N_("Top half"), WKBD_THMAXIMIZE, MAX_HORIZONTAL | MAX_TOPHALF },
{ N_("Maximize left top corner"), WKBD_LTCMAXIMIZE, MAX_LEFTHALF | MAX_TOPHALF }, { MI_SNAP_BH, N_("Bottom half"), WKBD_BHMAXIMIZE, MAX_HORIZONTAL | MAX_BOTTOMHALF },
{ N_("Maximize right top corner"), WKBD_RTCMAXIMIZE, MAX_RIGHTHALF | MAX_TOPHALF }, { MI_SNAP_TL, N_("Top left"), WKBD_LTCMAXIMIZE, MAX_LEFTHALF | MAX_TOPHALF },
{ N_("Maximize left bottom corner"), WKBD_LBCMAXIMIZE, MAX_LEFTHALF | MAX_BOTTOMHALF }, { MI_SNAP_TR, N_("Top right"), WKBD_RTCMAXIMIZE, MAX_RIGHTHALF | MAX_TOPHALF },
{ N_("Maximize right bottom corner"), WKBD_RBCMAXIMIZE, MAX_RIGHTHALF | MAX_BOTTOMHALF }, { MI_SNAP_BL, N_("Bottom left"), WKBD_LBCMAXIMIZE, MAX_LEFTHALF | MAX_BOTTOMHALF },
{ N_("Maximus: tiled maximization"), WKBD_MAXIMUS, MAX_MAXIMUS } { MI_SNAP_BR, N_("Bottom right"), WKBD_RBCMAXIMIZE, MAX_RIGHTHALF | MAX_BOTTOMHALF },
{ MI_SNAP_TILED, N_("Tiled"), WKBD_MAXIMUS, MAX_MAXIMUS }
}; };
static void updateOptionsMenu(WMenu * menu, WWindow * wwin); static void updateOptionsMenu(WMenu * menu, WWindow * wwin);
@@ -180,7 +182,7 @@ static void updateUnmaximizeShortcut(WMenuEntry * entry, int flags)
{ {
int key; int key;
switch (flags & (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS)) { switch (flags & (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS | MAX_CENTRAL)) {
case MAX_HORIZONTAL: case MAX_HORIZONTAL:
key = WKBD_HMAXIMIZE; key = WKBD_HMAXIMIZE;
break; break;
@@ -189,6 +191,10 @@ static void updateUnmaximizeShortcut(WMenuEntry * entry, int flags)
key = WKBD_VMAXIMIZE; key = WKBD_VMAXIMIZE;
break; break;
case MAX_CENTRAL:
key = WKBD_CENTRAL;
break;
case MAX_LEFTHALF | MAX_VERTICAL: case MAX_LEFTHALF | MAX_VERTICAL:
key = WKBD_LHMAXIMIZE; key = WKBD_LHMAXIMIZE;
break; break;
@@ -562,6 +568,7 @@ static WMenu *makeOptionsMenu(WScreen * scr)
static WMenu *makeMaximizeMenu(WScreen * scr) static WMenu *makeMaximizeMenu(WScreen * scr)
{ {
WMenu *menu; WMenu *menu;
WMenuEntry *entry;
int i; int i;
menu = wMenuCreate(scr, NULL, False); menu = wMenuCreate(scr, NULL, False);
@@ -570,8 +577,11 @@ static WMenu *makeMaximizeMenu(WScreen * scr)
return NULL; return NULL;
} }
for (i = 0; i < wlengthof(menu_maximize_entries); i++) for (i = 0; i < wlengthof(menu_maximize_entries); i++) {
wMenuAddCallback(menu, _(menu_maximize_entries[i].label), execMaximizeCommand, NULL); entry = wMenuAddCallback(menu, _(menu_maximize_entries[i].label), execMaximizeCommand, NULL);
entry->flags.indicator = entry->flags.indicator_on = 1;
entry->flags.indicator_type = menu_maximize_entries[i].indicator;
}
return menu; return menu;
} }
+31 -5
View File
@@ -2,7 +2,7 @@
* *
* Window Maker window manager * Window Maker window manager
* *
* Copyright (c) 2014 Window Maker Team - David Maciejak * Copyright (c) 2014-2023 Window Maker Team - David Maciejak
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -256,7 +256,7 @@ static WMPixmap *dummy_background_pixmap(WWorkspaceMap *wsmap)
RImage *img; RImage *img;
WMPixmap *icon; WMPixmap *icon;
img = RCreateImage(wsmap->wswidth, wsmap->wsheight, 0); img = RCreateImage(wsmap->mini_workspace_width, wsmap->mini_workspace_height, 0);
if (!img) if (!img)
return NULL; return NULL;
@@ -327,7 +327,7 @@ static void hide_mini_workspace(W_WorkspaceMap *wsmap_array, int i)
static WMPixmap *get_mini_workspace(WWorkspaceMap *wsmap, int index) static WMPixmap *get_mini_workspace(WWorkspaceMap *wsmap, int index)
{ {
if (!wsmap->scr->workspaces[index]->map) if (!wsmap->scr->workspaces[index]->map)
return dummy_background_pixmap(wsmap); return NULL;
if (index == wsmap->scr->current_workspace) if (index == wsmap->scr->current_workspace)
return enlight_workspace(wsmap->scr, wsmap->scr->workspaces[index]->map); return enlight_workspace(wsmap->scr, wsmap->scr->workspaces[index]->map);
@@ -486,12 +486,15 @@ static void handle_event(WWorkspaceMap *wsmap, W_WorkspaceMap *wsmap_array)
w_global.process_workspacemap_event = True; w_global.process_workspacemap_event = True;
while (w_global.process_workspacemap_event) { while (w_global.process_workspacemap_event) {
WMMaskEvent(dpy, KeyPressMask | KeyReleaseMask | ExposureMask WMMaskEvent(dpy, KeyPressMask | KeyReleaseMask | ExposureMask | PointerMotionMask |
| PointerMotionMask | ButtonPressMask | ButtonReleaseMask | EnterWindowMask, &ev); ButtonPressMask | ButtonReleaseMask | EnterWindowMask | FocusChangeMask, &ev);
modifiers = ev.xkey.state & w_global.shortcut.modifiers_mask; modifiers = ev.xkey.state & w_global.shortcut.modifiers_mask;
switch (ev.type) { switch (ev.type) {
WMScreen *wmscr;
WMColor *black;
case KeyPress: case KeyPress:
if (ev.xkey.keycode == escKey || (wKeyBindings[WKBD_WORKSPACEMAP].keycode != 0 && if (ev.xkey.keycode == escKey || (wKeyBindings[WKBD_WORKSPACEMAP].keycode != 0 &&
wKeyBindings[WKBD_WORKSPACEMAP].keycode == ev.xkey.keycode && wKeyBindings[WKBD_WORKSPACEMAP].keycode == ev.xkey.keycode &&
@@ -530,6 +533,29 @@ static void handle_event(WWorkspaceMap *wsmap, W_WorkspaceMap *wsmap_array)
} }
break; break;
case FocusIn:
wmscr = wsmap->scr->wmscreen;
black = WMBlackColor(wmscr);
const char *text = "?";
WMFont *bold = WMBoldSystemFontOfSize(wmscr, wsmap->mini_workspace_width / 3);
int x = (wsmap->mini_workspace_width / 2) - (WMWidthOfString(bold, text, strlen(text)) / 2);
int y = (wsmap->mini_workspace_height / 2) - (WMFontHeight(bold) / 2);
WMPixmap *icon = dummy_background_pixmap(wsmap);
if (icon) {
int i;
WMDrawString(wmscr, WMGetPixmapXID(icon),
black, bold, x, y, text, strlen(text));
for (i = 0; i < wsmap->scr->workspace_count; i++) {
if (!wsmap->scr->workspaces[i]->map)
WMSetButtonImage(wsmap_array[i].workspace_img_button, icon);
}
WMReleasePixmap(icon);
}
WMHandleEvent(&ev);
break;
default: default:
WMHandleEvent(&ev); WMHandleEvent(&ev);
break; break;
+1 -1
View File
@@ -2,7 +2,7 @@
* Window Maker window manager * Window Maker window manager
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2015 Window Maker Team
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -4,7 +4,7 @@ CATALOGS = @UTILMOFILES@
CLEANFILES = $(DOMAIN).pot $(CATALOGS) CLEANFILES = $(DOMAIN).pot $(CATALOGS)
EXTRA_DIST = de.po es.po fr.po fy.po nl.po pt.po EXTRA_DIST = de.po es.po fr.po fy.po nl.po pt.po sr.po
POTFILES = \ POTFILES = \
$(top_srcdir)/util/wmgenmenu.c \ $(top_srcdir)/util/wmgenmenu.c \
+1
View File
@@ -2,6 +2,7 @@ File Language Note Current Maintainer
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
nl.po Dutch Alwin <translations@ziggo.nl> nl.po Dutch Alwin <translations@ziggo.nl>
fy.po Frisian Alwin <translations@ziggo.nl> fy.po Frisian Alwin <translations@ziggo.nl>
sr.po Serbian Strahinya Radich <contact@strahinja.org>
Notes Notes
----- -----
+2008
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -217,7 +217,7 @@ int main(int argc, char *argv[])
WMCreatePLString(label), \ WMCreatePLString(label), \
WMCreatePLString("EXEC"), \ WMCreatePLString("EXEC"), \
WMCreatePLString("wdwrite WindowMaker WorkspaceBack '(vgradient, \"" \ WMCreatePLString("wdwrite WindowMaker WorkspaceBack '(vgradient, \"" \
fcolorspec "\", \"" tcolorspec "\"'"), \ fcolorspec "\", \"" tcolorspec "\")'"), \
NULL \ NULL \
); \ ); \
WMAddToPLArray(L3Menu, L4Menu) WMAddToPLArray(L3Menu, L4Menu)
+2 -4
View File
@@ -1,7 +1,7 @@
/* /*
* Window Maker window manager * Window Maker window manager
* *
* Copyright (c) 2014 Window Maker Team - David Maciejak * Copyright (c) 2014-2023 Window Maker Team - David Maciejak
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -63,8 +63,6 @@ RImage *img;
Pixmap pix; Pixmap pix;
const char *APPNAME = "wmiv"; const char *APPNAME = "wmiv";
int APPVERSION_MAJOR = 0;
int APPVERSION_MINOR = 7;
int NEXT = 0; int NEXT = 0;
int PREV = 1; int PREV = 1;
float zoom_factor = 0; float zoom_factor = 0;
@@ -740,7 +738,7 @@ int main(int argc, char **argv)
argv[0]); argv[0]);
return EXIT_SUCCESS; return EXIT_SUCCESS;
case 'v': case 'v':
fprintf(stderr, "%s version %d.%d\n", APPNAME, APPVERSION_MAJOR, APPVERSION_MINOR); printf("%s version %s\n", APPNAME, VERSION);
return EXIT_SUCCESS; return EXIT_SUCCESS;
case '?': case '?':
return EXIT_FAILURE; return EXIT_FAILURE;
+1 -1
View File
@@ -2,7 +2,7 @@
* *
* Raster graphics library * Raster graphics library
* *
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2021 Window Maker Team
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public * modify it under the terms of the GNU Library General Public
+1 -1
View File
@@ -3,7 +3,7 @@
* Raster graphics library * Raster graphics library
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2021 Window Maker Team
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public * modify it under the terms of the GNU Library General Public
+1 -1
View File
@@ -2,7 +2,7 @@
* *
* Raster graphics library * Raster graphics library
* *
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2021 Window Maker Team
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public * modify it under the terms of the GNU Library General Public
+1 -1
View File
@@ -3,7 +3,7 @@
* Raster graphics library * Raster graphics library
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2021 Window Maker Team
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public * modify it under the terms of the GNU Library General Public
+1 -1
View File
@@ -2,7 +2,7 @@
* *
* Raster graphics library * Raster graphics library
* *
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2021 Window Maker Team
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public * modify it under the terms of the GNU Library General Public
+1 -1
View File
@@ -3,7 +3,7 @@
* Raster graphics library * Raster graphics library
* *
* Copyright (c) 1997-2003 Alfredo K. Kojima * Copyright (c) 1997-2003 Alfredo K. Kojima
* Copyright (c) 2014 Window Maker Team * Copyright (c) 2014-2021 Window Maker Team
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public * modify it under the terms of the GNU Library General Public
+1 -1
View File
@@ -4,7 +4,7 @@ CATALOGS = @WRASTERMOFILES@
CLEANFILES = $(CATALOGS) $(DOMAIN).pot CLEANFILES = $(CATALOGS) $(DOMAIN).pot
EXTRA_DIST = fr.po EXTRA_DIST = fr.po sr.po
POTFILES = \ POTFILES = \
$(top_srcdir)/wrlib/raster.c \ $(top_srcdir)/wrlib/raster.c \
+182
View File
@@ -0,0 +1,182 @@
# Serbian messages for Window Maker
# Copyright (C) 1997-2006 Alfredo K. Kojima
# 1998-2006 Dan Pascu
# 2013-2020 Window Maker Developers Team
# This file is distributed under the same license as the Window Maker package.
# Strahinya Radich (Страхиња Радић) <contact@strahinja.org>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: WindowMaker 0.96.0\n"
"Report-Msgid-Bugs-To: wmaker-dev@googlegroups.com\n"
"POT-Creation-Date: 2023-11-02 19:43+0100\n"
"PO-Revision-Date: 2023-11-02 19:48+0100\n"
"Last-Translator: Страхиња Радић <contact@strahinja.org>\n"
"Language-Team: Serbian <sr@li.org>\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: poe 1.6.0-2-ge0263e3\n"
#: ../../wrlib/load.c:130
#, c-format
msgid "wrlib: out of memory for image cache\n"
msgstr "wrlib: недовољно меморије за кеш слика\n"
#: ../../wrlib/xpixmap.c:160
#, c-format
msgid "wrlib: invalid window or pixmap passed to RCreateImageFromDrawable\n"
msgstr ""
"wrlib: RCreateImageFromDrawable прослеђени неисправан прозор или пиксмапа\n"
#: ../../wrlib/context.c:410
#, c-format
msgid "wrlib: no standard colormap found for visual 0x%lX\n"
msgstr "wrlib: за visual 0x%lX није пронађена стандардна мапа боја\n"
#: ../../wrlib/context.c:458 ../../wrlib/context.c:470
#, c-format
msgid "wrlib: invalid value \"%s\" for %s\n"
msgstr "wrlib: неисправна вредност „%s“ за %s\n"
#: ../../wrlib/misc.c:207
msgid "no error"
msgstr "без грешке"
#: ../../wrlib/misc.c:210
msgid "could not open file"
msgstr "не може се отворити датотека"
#: ../../wrlib/misc.c:213
msgid "error reading from file"
msgstr "грешка приликом читања из датотеке"
#: ../../wrlib/misc.c:216
msgid "error writing to file"
msgstr "грешка приликом уписивања у датотеку"
#. Known codes as per libWebP 0.4.1
#: ../../wrlib/misc.c:219 ../../wrlib/load_webp.c:46
msgid "out of memory"
msgstr "недовољно меморије"
#: ../../wrlib/misc.c:222
msgid "out of color cells"
msgstr "недовољно ћелија боја"
#: ../../wrlib/misc.c:225
msgid "invalid or corrupted image file"
msgstr "неисправна или оштећена датотека слике"
#: ../../wrlib/misc.c:228
msgid "image format is not supported"
msgstr "формат слике није подржан"
#: ../../wrlib/misc.c:231
msgid "file does not contain requested image index"
msgstr "датотека не садржи захтевани индекс слике"
#: ../../wrlib/misc.c:234
msgid "request for an invalid Visual ID"
msgstr "захтевва се неисправни Visual ID"
#: ../../wrlib/misc.c:237
msgid "failed to create X standard colormap"
msgstr "не може се креирати стандардна X мапа боја"
#: ../../wrlib/misc.c:240
msgid "internal X error"
msgstr "интерна грешка X-а"
#: ../../wrlib/misc.c:244
msgid "internal error"
msgstr "интерна грешка"
#: ../../wrlib/xutil.c:115 ../../wrlib/xutil.c:122
#, c-format
msgid "wrlib: could not allocate shared memory segment, %s: %s\n"
msgstr "wrlib: не може се алоцирати дељени сегмент меморије, %s: %s\n"
#: ../../wrlib/xutil.c:125 ../../wrlib/xutil.c:145 ../../wrlib/xutil.c:147
#, c-format
msgid "wrlib: error occured while aborting %s, %s\n"
msgstr "wrlib: грешка приликом прекидања %s, %s\n"
#: ../../wrlib/xutil.c:141
#, c-format
msgid "wrlib: could not attach shared memory segment to XImage\n"
msgstr "wrlib: не може се придружити меморијски сегмент XImage-у\n"
#: ../../wrlib/xutil.c:169 ../../wrlib/xutil.c:171
#, c-format
msgid "wrlib: error occured while releasing XImage, %s: %s\n"
msgstr "wrlib: грешка приликом ослобађања XImage-а, %s: %s\n"
#: ../../wrlib/load_ppm.c:57 ../../wrlib/load_ppm.c:64
#: ../../wrlib/load_ppm.c:77
#, c-format
msgid "wrlib: EOF / read error reading a byte from PPM file \"%s\"\n"
msgstr "wrlib: EOF / грешка приликом читања бајта из PPM датотеке \"%s\"\n"
#: ../../wrlib/load_ppm.c:91
#, c-format
msgid ""
"wrlib: junk in PPM file \"%s\", expected an unsigned integer but got 0x%02X\n"
msgstr ""
"wrlib: смеће у PPM датотеци „%s“, очекује се неозначен цео број, али је "
"присутно 0x%02X\n"
#: ../../wrlib/load_ppm.c:100 ../../wrlib/load_ppm.c:107
#, c-format
msgid ""
"wrlib: ASCII decimal integer in PPM file \"%s\" is too large to be "
"processed\n"
msgstr ""
"wrlib: ASCII децимални цео број у PPM датотеци „%s“ је превелик за обраду\n"
#: ../../wrlib/load_webp.c:47
msgid "invalid parameter"
msgstr "неисправан параметар"
#: ../../wrlib/load_webp.c:48
msgid "error in the bitstream"
msgstr "грешка у потоку битова"
#: ../../wrlib/load_webp.c:49
msgid "feature is not supported"
msgstr "одлика није подржана"
#: ../../wrlib/load_webp.c:50
msgid "operation suspended"
msgstr "операција је заустављена"
#: ../../wrlib/load_webp.c:51
msgid "aborted by user"
msgstr "кориснички прекид"
#: ../../wrlib/load_webp.c:52
msgid "not enough data"
msgstr "недовољно података"
#: ../../wrlib/load_webp.c:61
#, c-format
msgid "unknow status code %d"
msgstr "непознат статусни код %d"
#: ../../wrlib/load_webp.c:106
#, c-format
msgid "wrlib: could not get size of WebP file \"%s\", %s\n"
msgstr "wrlib: не може се одредити величина WebP датотеке „%s“, %s\n"
#: ../../wrlib/load_webp.c:133
#, c-format
msgid "wrlib: could not get features from WebP file \"%s\", %s\n"
msgstr "wrlib: не могу се одредити одлике WebP датотеке „%s“, %s\n"
#: ../../wrlib/load_webp.c:165
#, c-format
msgid "wrlib: failed to decode WebP from file \"%s\"\n"
msgstr "wrlib: не може се декодирати WebP из датотеке „%s“\n"