From 5ac086969033256864e3803f8b8e01ad914c9d30 Mon Sep 17 00:00:00 2001 From: "berkeleybross@gmail.com" Date: Sat, 26 Dec 2020 22:25:09 +0000 Subject: [PATCH 01/69] Copied wiki into readme files --- README.md | 80 ++++++++++++++++++++++++++ docs/advanced-gestures.md | 23 ++++++++ docs/build-instructions.md | 110 +++++++++++++++++++++++++++++++++++ docs/index.md | 115 +++++++++++++++++++++++++++++++++++++ docs/tips-and-tricks.md | 98 +++++++++++++++++++++++++++++++ docs/translations.md | 32 +++++++++++ 6 files changed, 458 insertions(+) create mode 100644 README.md create mode 100644 docs/advanced-gestures.md create mode 100644 docs/build-instructions.md create mode 100644 docs/index.md create mode 100644 docs/tips-and-tricks.md create mode 100644 docs/translations.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..2e0cd7a7 --- /dev/null +++ b/README.md @@ -0,0 +1,80 @@ +Easystroke is a gesture-recognition application for X11. Gestures or strokes are movements that you make with you mouse (or your pen, finger etc.) while holding down a specific mouse button. Easystroke will execute certain actions if it recognizes the stroke; currently easystroke can emulate key presses, execute shell commands, hold down modifiers and emulate a scroll wheel. The program was designed with Tablet PCs in mind and can be used effectively even without access to a keyboard. Easystroke tries to provide an intuitive and efficient user interface, while at the same time being highly configurable and offering many advanced features. + +# News + * [2018-12-05] Maintenance Update. As development has stalled, and the original Author is not available, but the program is still widely used, an update in terms of bugfixing and maintenance of the code has been attempted. See [BuildInstructions](https://github.com/thjaeger/easystroke/wiki/BuildInstructions) for more information. + * [2013-03-27] Released 0.6.0 This release contains few user-visible changes beside a few bugfixes. Easystroke has been ported to gtk3 and event handling code has been refactored in anticipation of touch support. Unfortunately, touch grab support in the X server is still too fragile for easystroke to be able to take advantage of it (you can preview touch support on the 'touch' branch). + * [2012-10-06] Released 0.5.6 This release incorporates fixes for most of the issues that have come up over the last year or so. It also adds Hungarian translations. Stay tuned, 0.6.0 with gtk3 and improved touch support will be released soon. The 0.5 branch will not see any new features, only bugfixes if necessary. + * [2011-08-16] Released 0.5.5.1 This fixes a build failure in 0.5.5. + * [2011-08-16] Released 0.5.5 This release adds per-device timeout settings. An extra click is now required for button actions to improve precision and scroll actions use XI2 Raw events so that the cursor is not confined to the screen. The release also includes various bugfixes and adds Catalan, Finnish, Korean and Traditional Chinese translations. + * [2010-07-27] Released 0.5.4 Just a few minor bug fixes. + * [2010-02-13] Released 0.5.3 This release adds an option to move the cursor back to the original position after each gesture and fixes a crash when a gesture times out during recording, along with a few minor bugs. + * [2010-01-09] Released 0.4.11 This release only fixes one bug that would cause a wrong key to be emitted under certain circumstances. + * [2010-01-02] Released 0.5.2 This release adds Hebrew translations and should improve keystroke handling. + * [2009-11-19] Released 0.4.10 This is a bugfix release for the non-xi2 branch of easystroke. It also adds Hebrew translations. + * [2009-10-27] Released 0.5.0 This release is a port of easystroke to XI 2 (it doesn't add any new features). You need a recent X server (at least 1.7) to run this version. Most people will probably want to stick with 0.4.9 for now. + * [2009-08-19] Released 0.4.9 This release fixes a bug regarding application groups and adds Polish translations. + * [2009-08-15] Released 0.4.8 This release fixes a long-standing bug that would prevent easystroke from working when only application-dependent gestures were defined. + * [2009-07-05] Released 0.4.7 This release adds a workaround an (1.6) X server bug causing problems with vertical gestures on some devices. + * [2009-06-16] Released 0.4.6 This release adds Russian translations and works around two issues on karmic and amd64 arch. + * [2009-06-01] Released 0.4.5 This release fixes one crash-bug and adds Chinese translations. + * [2009-05-12] Released 0.4.4 This fixes two annoying bugs in 0.4.3 + * [2009-05-09] Released 0.4.3 This is mostly a bugfix release, but it also improves drag-and-drop behavior + * [2009-05-09] Released 0.4.2 This is a bugfix-only version of 0.4.3 that I accidentally uploaded, please ignore. + * [2009-03-16] Released 0.4.1.1 This is a bugfix release. + * [2009-02-20] Released 0.4.1 This release introduces a new stroke-matching algorithm, adds click-and-hold gestures and contains various bug fixes. + * [2009-02-06] Released 0.4.0 This version adds support for the upcoming X Server 1.6, comes with Czech, German, Italian and Spanish translations and makes it possible to use multiple gesture buttons. + * [2008-12-22] Released 0.3.1 We now have a much better method for drawing strokes on composited desktops, but this release also contains a few bugfixes and an option to autostart the program. + * [2008-11-07] Released 0.3.0 This release introduces many new features, most notably application-dependent gestures. See the [changelog](http://github.com/thjaeger/easystroke/tree/master%2Fchangelog?raw=true) for details + * [2008-09-18] Released 0.2.2.1 This is a bug fix release, resolving a few minor issues. + * [2008-08-17] Released 0.2.2 This version features improved visual feedback, configurable gesture timeout, better pointer tracking and many minor improvements. + * [2008-08-06] Released 0.2.1.1. This just adds license information to the source files in order to facilitate Ubuntu packaging. An update is not necessary. + * [2008-08-03] Released 0.2.1, correcting some silly Makefile mistakes. + * [2008-08-03] Released 0.2.0. This version contains many tablet-related improvements and introduces [FeatureAdvancedGestures]. Please allow a few days for the documentation to be updated to the current version. + * [2008-06-22] Released 0.1.2. Fixes a few minor UI glitches. + * [2008-06-19] Released 0.1.1. This version introduces [FeatureClickDuringStroke], which allows you to emulate a mouse click by clicking a second button during a stroke (which can essentially turn a one-button tablet pen into three-button mouse). + * [2008-06-14] Released 0.1. This is first public release. + +# Download + +Releases can be found on the [sourceforge download page](http://sourceforge.net/project/showfiles.php?group_id=229797). See the [BuildInstructions Build Instructions] to learn how to build easystroke from source or see below if there are pre-built packages available for your distribution. + +## Ubuntu +You can find i386 and amd64 .debs for Ubuntu Karmic and Hardy on the [sourceforge download page](http://sourceforge.net/project/showfiles.php?group_id=229797). These packages, along with packages for Jaunty and Lucid, are also available through the [easystroke Lauchpad PPA](https://launchpad.net/~easystroke/+archive/ppa). Just add the following two lines to your /etc/apt/sources.list file (replace karmic with the verion of ubuntu that you're running). + + deb http://ppa.launchpad.net/easystroke/ppa/ubuntu karmic main + deb-src http://ppa.launchpad.net/easystroke/ppa/ubuntu karmic main + + +## OpenSUSE + +Easystroke is part of the openSUSE Contrib repository and the X11:Utilities devel +repository, see the [openSUSE Build Service](http://software.opensuse.org/search?baseproject=ALL&p=1&q=easystroke) for a list available builds. + +# Development + +You can fetch the [latest development tree](http://github.com/thjaeger/easystroke/tree/master) using git: + + git clone git://github.com/thjaeger/easystroke.git + + +# Documentation + +[Documentation](Documentation) + +[Tips & Tricks](TipsAndTricks) + +[Build Instructions](BuildInstructions) + +Easystroke is distributed under the [ISC License](http://github.com/thjaeger/easystroke/tree/master%2FLICENSE?raw=true). + +# How can I help out? + +If you encounter any bugs or problems with easystroke, please report them, preferably using [trac](https://sourceforge.net/apps/trac/easystroke/report) (be sure to assign the ticket to me (thjaeger), so that I get notified by e-mail). Feature suggestions are also welcome, but note that I only have limited time to implement new features (usually, changes in the X server are enough to keep me busy). + +The easystroke website is a wiki that anyone can edit (with the exception of the front page). Please feel free to add any information (tutorials, documentation, etc.) that might be interesting to other users. Work on the [Documentation](Documentation) page is especially appreciated, I don't have the time and patience to keep it up to date. + +To find out how to translate easystroke into your native language, see [Translations](Translations). + +# Author + +Easystroke is being developed by [Thomas Jaeger](mailto:ThJaeger@gmail.com). Comments, suggestions, bug reports, patches and criticism are very welcome! \ No newline at end of file diff --git a/docs/advanced-gestures.md b/docs/advanced-gestures.md new file mode 100644 index 00000000..7e6c33f2 --- /dev/null +++ b/docs/advanced-gestures.md @@ -0,0 +1,23 @@ +Back to the main [Documentation](../Documentation) page. + +Advanced gestures are gestures where you click an additional button while already holding down the trigger button. + +The feature can be used in two different ways, depending on the value of the option "Ignore strokes leading up to advanced gestures". If the option is set, the stroke that has been performed prior to triggering the advanced gesture will be discarded, so you essentially get as many advanced gestures as your mouse has buttons, minus the one that is used to trigger gestures. If the option is not checked, advanced gestures are also distinguished by their stroke. Note that until you release the gesture trigger button, the same stroke will be used for subsequent actions. + +# Preview pictures + +|| [[Image(MiscWikiFiles:advanced-button.png, align=center)]] || This is the picture of an advanced gesture where both buttons are pressed without moving the mouse in between. +|| [[Image(MiscWikiFiles:advanced-stroke.png, align=center)]] || This is the symbol for a stroke followed by a click of an additional button. The "Ignore..." option needs to be disabled in order to use this type of gesture. +|| [[Image(MiscWikiFiles:advanced-click.png, align=center)]] || This one is just a single click of the gesture trigger button. + +# Examples + +## Emulate a right-click on a Tablet PC pen +A big shortcoming of most Tablet PC pens is that they only two "buttons": The tip of the pen and one button on the side. You can set up easystroke to treat pressing the side button, followed by a regular click as a right click. Just open the "Actions" tab and add a new action. Choose "Button" as its type and then select the right button (Button3). Finally you need to record the stroke, which is just an unreleased middle-click followed by a right-click. + +## Alt+Tab switching in Compiz +Setting up regular gestures to switch between windows by pressing Alt+Tab won't work very well: The problem is that this requires holding down the Alt key, but regular gestures have to release the key immediately. This is where advanced gestures come in: Now the modifiers associated to the last action will be held down until the gesture is over, i.e. until you release the gesture trigger button. As an example, let's set up easystroke to allow Alt+Tab switching by performing an "up"-stroke (without releasing the trigger button), followed by flicking the scroll wheel. Make sure that the "Ignore..." option described above is disabled. This time we need to add two actions, one for the up button (Button4) and one for the down (Button5). Set them up to be key actions, pressing Alt+Tab and Alt+Shift+Tab, and then record the two strokes. Not that you will have to perform the stroke for both mouse buttons, once followed by an up flick and once by a down flick, but when you're actually executing the action multiple times in a row, you only need to perform the stroke once. + +# Preparation + +If you want to use this feature on a Tablet PC, you should turn off the linuxwacom driver's TPCButtons option, so that just pressing the side switch will produce a middle click, see [TipsAndTricks](../TipsAndTricks) for details. \ No newline at end of file diff --git a/docs/build-instructions.md b/docs/build-instructions.md new file mode 100644 index 00000000..697dca71 --- /dev/null +++ b/docs/build-instructions.md @@ -0,0 +1,110 @@ +Easystroke is written in C++ and uses gtkmm for its GUI, but it also depends on the availability of several X11 extensions (Xtst, Xrandr and Xinput) and on the boost::serialization library. Installation of the libraries is distribution-specific. Please feel free to add instructions for your distro of choice. + +# Debian/Ubuntu + + sudo apt-get install g++ libboost-serialization-dev libgtkmm-3.0-dev libxtst-dev libdbus-glib-1-dev intltool xserver-xorg-dev + +or + + + sudo apt-get build-dep easystroke + +NOTE: Easystroke 5.x and below need libgtkmm-2.4-dev to build, not 3.0. + +# Fedora + + yum install gcc-c++ gtkmm30-devel dbus-glib-devel boost-devel libXtst-devel intltool + +NOTE: You might have to install 'xorg-x11-server-devel' for easystroke to compile probably (I had to). + +# OpenSUSE + + zypper in make gcc gcc-c++ gtkmm2-devel glib2-devel dbus-1-glib-devel boost-devel intltool + +NOTE: You might have to install 'xorg-x11-server-sdk' to successfully build on 12.X. +# Pardus + + pisi it make gcc gtkmm boost-devel intltool + +For Pardus, you also have to add -lXi to the LIBS row in the Makefile in order to get the app to compile. + +# Releases +~~[Sourceforge download page](http://sourceforge.net/project/showfiles.php?group_id=229797)~~ + +NOTE: As for now, easystroke is in an unmaintained state. + +- The original author is not available. +- The last release was on 23. March 2013, so ~6 Years ago. +- Even the master tree is not build-able any more without patches from unmerged pull requests. +- As we do not have the credentials for this repository and the sourceforge page, an alternative solution has to be found. +- Many distributions still build their packages from 0.6.0 release, which causes numerous problems. + - A list of the commits to git master since release can be found [here](https://github.com/thjaeger/easystroke/pull/10#issuecomment-444132355) + - On Ubuntu's bug tracker for example, there are numerous bug entries where fixes are available, but they are not applied there. + +**The steady flow of pull requests nevertheless shows the interest in this unique program** + +- Preliminary binary bugfix-release of 2018/12/05: [AppImage](http://openartisthq.org/easystroke/easystroke-0.6.0-1ubuntu12-x86_64.AppImage) (built on Ubuntu 18.04; easystroke should run directly by making it executable and double clicking it.) + +- Preliminary Debian package release with all patches applied: +[easystroke_0.6.0-0ubuntu8_amd64.deb](http://openartisthq.org/easystroke/easystroke_0.6.0-0ubuntu8_amd64.deb) (built on Ubuntu 18.04) + +- Preliminary source-code bugfix-release of 2018/12/05: [patched-easystroke-master.tar.bz2](http://openartisthq.org/easystroke/patched-easystroke-master.tar.bz2) (already patched, patches included for reference) + + - Short instructions for compiling (after you installed the build-dependencies for your distribution as stated above) : + + ``` + wget http://openartisthq.org/easystroke/patched-easystroke-master.tar.bz2 + tar xvjf patched-easystroke-master.tar.bz2 + cd patched-easystroke-master/easystroke + make + ``` + + then run it with + `./easystroke` + + or install it to /usr/local with + `sudo make install` + + (in case your distribution does not have sudo installed, it's obviously just "make install" + + + + + +- These patches were applied on top of [git master](https://github.com/thjaeger/easystroke/): + + - [fix build failed in libsignc++ version 2.5.1 or newer](https://github.com/thjaeger/easystroke/pull/9/commits/22b28d25bb696e37e73b4bc641439b3db9f564ed) build fix + - [Remove abs(float) function that clashes with std::abs(float)](https://github.com/thjaeger/easystroke/pull/8/commits/9e2c32390c5c253aade3bb703e51841748d2c37e) build fix + - [fixed recurring crash when trying to render 0x0 tray icon](https://github.com/thjaeger/easystroke/pull/10/commits/140b9cae66ba874bf0994eea71210baf417a136e) bug fix + - [dont-ignore-xshape-when-saving.patch](https://aur.archlinux.org/cgit/aur.git/tree/dont-ignore-xshape-when-saving.patch?h=easystroke-git) bug fix, fixes [Changing 'method to show gestures' to Xshape does not persist](https://bugs.launchpad.net/ubuntu/+source/easystroke/+bug/1728746) + - [switch from fork to g_spawn_async](https://github.com/thjaeger/easystroke/pull/6/commits/0e60f1630fc6267fcaf287afef3f8c5eaafd3dd9) bug fix `This fixes a serious bug that can lead to system instability. Without this patch, if a 'Command' action is commonly used, it will lead to so many zombie processes that the OS will be unable to launch additional processes.` + - [add-toggle-option.patch](https://aur.archlinux.org/cgit/aur.git/tree/add-toggle-option.patch?h=easystroke-git) new feature: adds a actvation/deactivation toggle when right-clicking the tray icon`` + - [easystroke-0.6.0-gnome3-fix-desktop-file](https://src.fedoraproject.org/cgit/rpms/easystroke.git/commit/?id=4d59e8e1e849a09887c4588c84a1e1e02c350949) cosmetic fix + + +A list of all available Patches can be found [here](https://github.com/thjaeger/easystroke/pull/10#issuecomment-444132355) for now. + +Detailed instructions to follow. + +# Development Tree + +As development is stalled, the following section is not relevant for now. + +~~Most users will probably want to use a released version, so they can skip this section. However, there are a few reasons why someone would use the latest development version and you are absolutely encouraged to do so.~~ + + * ~~You want to get a sneak preview of the awesome features that are planned for the next release.~~ + * ~~You want to help me out by trying to catch bugs before they make it into a release. This is greatly appreciated.~~ + * ~~You want to send me a patch.~~ + +~~Please always *keep a backup of your .easystroke configuration directory*, as the file format is often unstable during development and it is usually not possible to go back to the stable release once the configuration has been saved in a newer file format.~~ + +Note that some advanced features are only available if easystroke is started with the -e command line option. +______________________ + +Easystroke uses git for revision control. To fetch the development tree for the first time, type + + git clone git://github.com/thjaeger/easystroke.git + +which will create a subdirectory 'easystroke' containing the sources. You can update to the latest tree anytime by changing into that directory and typing 'git pull'. + +Now we're ready to build the program. Change into the easystroke directory and type 'make -j2'. This will create an executable file that you can either run directly or copy into your $PATH (easystroke does not require additional files to be installed), but of course you can also use 'make install' to install the program to /usr/local/bin. You can also create a small manpage using help2man by typing 'make man'. \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..118e0c9c --- /dev/null +++ b/docs/index.md @@ -0,0 +1,115 @@ +Note: The documentation is outdated. Help in keeping this up to date is always appreciated. The changelog entries at the end of this page serve as a reminder what still needs to be documented. + +Easystroke is a gesture-recognition program, which can execute predefined actions based on "gestures" that you draw on the screen. To see what this is all about, start easystroke and begin drawing a few gestures by holding down the middle mouse button and moving your mouse/pen around. (Peek ahead a little bit if the middle button is inconvenient for you.) Right now, nothing happens yet when you draw a gesture, so let's define some actions next. + +Say you want to use gestures to switch tabs in Firefox. + +1. Click on the tray icon to open the program's configuration dialog +1. Click _Add Action_ to define your first action. An editable text field appears showing the preliminary name of the gesture, _Gesture 1_. +1. Change the name to _tab-left_, +1. Select _Key_ in the type column +1. Press the key combination that goes one tab to the left, namely _Ctrl+Page Up_ (you could also use _Ctrl+Left_, but that won't work in some other apps such as gnome-terminal). +1. Click on _Record Stroke_, hold down the middle button and move your mouse to the left. Of course you could have just as well used any other shape, including something curvy. + +A _tab-right_ gesture can be defined in the same way, this time moving the mouse to the right (the key combination is _Ctrl+Page Down_, by the way). If you open a Firefox window with a bunch of open tabs, you can now switch tabs just by drawing the gestures you just defined, without having to move you mouse to the other end of the screen). + +The rest of the document describes the program's options in more detail. Note that preferences are always saved instantly, so you don't need to worry about losing your newly-recorded strokes if there is a crash. You can quit easystroke by right-clicking on the tray icon and selecting _Quit_. + +# Action types +[[Image(MiscWikiFiles:easystroke-actions.png)]] + +This is the list of strokes and their associated actions. Adding and deleting lines and recording strokes is straightforward, but let's have a look at the different actions that are currently supported + +## Command + +Executes a shell command. For example, you could use the tool _xte_ (from the Debian/Ubuntu package _xautomation_) to emulate an arbitrary sequence of key presses (but see below for single key presses). + +## Key + +Emulates a single key press, possibly with modifiers held down. + +## Text + +Inserts a fixed text into the application. For characters that are not associated with any key on the keyboard, this requires working Unicode input (which generally present in gtk applications). + +## Ignore + +Sends the next "stroke" directly to the application. An useful feature of this action is that it can also hold down a modifier for the next thing you do with your mouse: To set this up, click on the entry in the _Argument_ column and hold down the modifier(s) and in arbitrary key. So for example, in most window managers, you can move or resize windows using the _move_ action in the screenshot above. + +## Scroll + +Allows you to emulate a scroll wheel by moving your mouse/pen up or down. The action is active until you press and release any button. You can define an additional modifiers to be held down in the same way as for _Ignore_. + +## Button + +Emulates a button press, again possibly with modifiers. If you need to be able to move the pointer while the button is held down, consider using the 'Ignore' action or [FeatureAdvancedGestures Advanced Gestures]. + +## Misc + * 'Unminimize' undoes the last minimize actions + * 'Show/Hide' brings up or hides the configuration dialog + * 'Disable (Enable)' disables (or enables if invoked from the command line) the program. + +[[Image(MiscWikiFiles:easystroke-apps.png)]] + +# Application and Groups +By default, gestures work in any application (unless the application is disabled entirely, which can be set up on the _Preferences_ tab). This feature allows you to set up easystroke to behave differently depending on which application the cursor is in. To use the feature, simply open the _Applications_ expander on the _Actions_ tab. You can maintain a list of applications, whose behavior differs from the default by using the _Add Application_ and _Remove Application_ buttons. The special entry _Default_ refers to all other applications. To edit the list of gestures for an application simply click on the application. + +It is important to understand how application-dependent gestures are stored: rather than maintaining a list of actions for each application, easystroke only stores the *difference* to its parent node _Default_. This means that all default actions are available in your applications, and if you add or delete a gesture in the _Default_ actions, this change will be reflected in all applications. On the other hand, adding, changing or deleting gestures for a specific application never affects the list of default actions in any way, and you can revert to the default at any time using the _Reset Action(s)_ button. You can even bring actions back from the dead by enabling the _Show deleted rows_ check box and then resetting the deleted actions. It is easy to tell which actions have been changed compared with the default: changed entries are rendered bold; deleted actions appear grayed out. + +The power of this approach is best illustrated by an example: The screenshot above shows some modifications that were made to the action list for the gnome-terminal application. Most applications with a tabbed interface use Ctrl+T as a shortcut for opening a tab, but gnome-terminal uses the non-standard Shift+Ctrl+T combination, so that the user can use Ctrl+T to interact with terminal applications. In easystroke, we can simply change the key combination for gnome-terminal to Shift+Ctrl+T without affecting any other applications. Similarly, gnome-terminal doesn't support to reopen a closed tab, so we can simply delete the action from the list. + +If you'd like several application to be have in a similar way, you may combine them to an _Application Group_. All applications belonging to the application group inherit their gestures from the group, which in turn inherits its actions from its parent. Easystroke allows arbitrary trees (with root _Default_) as its hierarchy for applications and groups. + +[[Image(MiscWikiFiles:easystroke-preferences.png)]] + +# Behavior + +'Gesture Button' allows you to choose which button strokes are performed with. The default is the middle button as this is the button that corresponds to the side switch on tablet pens. Note that the left mouse button (on a touch screen or a passive digitizer) works reasonably well, too. + +[Advanced Gestures](FeatureAdvancedGestures) have their own documentation page. + +Since it is hard to perform clicks without any motion on most pointing devices and since it is also difficult to reliably recognize gestures that are too short, easystroke will only treat motions as gestures that have a certain minimum length. This length can be configured using the 'Treat it as a click if the cursor isn't moved more than this many pixels away from the original position' option. + +If you enable the 'Accept gestures when menus are shown' option, easystroke will allow gesturing even when the server is grabbed (which happens when applications display menus and in a few other situations: many compiz plugins do this, too). Note that any clicks you make during a server grab will be passed to the grabbing application, which might result in unexpected behavior, especially if the gesture button is set to the left button. + +In 'Timeout profile' profile combo box, you can set up how fast gestures are timing out, or completely turn off timeouts. Note that you can get advanced timeout options if you start easystroke in experimental mode ("easystroke -e"). + +# Appearance + +The following three methods are available to show strokes on the screen: + * _None_ will disable any feedback when drawing a stroke + * _Default_ will try to use the best method available on your system. On composited desktops this draws (anti-aliased and subpixel-aware) strokes on transparent windows, otherwise it will fall back to the XShape method (see below). + * _XShape_ uses the (old) XShape extension to create a window whose shape is the stroke. This works well on non-composited desktops unless your strokes are very long. + * _Annotate (Compiz)_ communicates with compiz's annotate plugin via compiz. In order for this to work, you need to enable both the 'annotate' and the 'dbus' plugin. Color, thickness and transparency of strokes can be configured in the compizconfig settings manager. + * _Fire (compiz)_ Draws gestures as fire. Requires the firepaint and dbus compiz plugins to be enabled and needs a very recent firepaint version from compiz fusion git. + * _Water (compiz)_ Uses compiz' water plugin to draw gestures. + +If the 'Show popups' option is enabled a small popup will be shown whenever a gesture has been successfully identified. The 'optimized for left-handed operation' option will cause the popup to be shown to the left of the cursor so that left-handed Tablet PC users will be able to see it. + +# Tablet Options + +You should enable the 'Work around timing issues' options if you have a Tablet PC or a wacom tablet and you intend to use the [FeatureAdvancedGestures Advanced Gestures] feature. This will do the right thing if two click events come in at the same time even though you probably clicked the side switch first. + +If the 'Stay in scroll and ignore mode as long as the pen is within range' option is enabled, scroll and ignore mode stay activated until the pen is lifted far enough away from the screen. This is only available on devices that support proximity events such as tablets or Tablet PCs. + +The 'Abort stroke if pressure exceeds the number on the left' option allows you to abort gestures by exerting a certain pressure on the pen. This is only available on devices that support pressure such as tablets or Tablet PCs. + +# Exceptions + +'Exceptions' is a list of applications where easystroke is disabled. For example, you could add 'xournal' to the list in order to be able to use the tablet button as an eraser. + +[[Image(MiscWikiFiles:easystroke-advanced.png)]] + + +[[Image(MiscWikiFiles:easystroke-history.png)]] + +A common problem with gesture applications is the lack of feedback and transparency: If something goes wrong it's hard to tell what action was executed and why and how you can prevent a similar thing from happening in the future. The _Statistics_ tab tries to alleviate this problem by showing a history of the last few strokes and how close easystroke judged them to be to the strokes in the actions list. This might give you a clue which strokes you might have to re-record or replace by something totally different. + +Moreover, the matrix button will show you a complete table of how close the strokes in your database are to each other. It creates a file 'strokes.pdf' in the /tmp directory and then calls evince on it. + +# Experimental Mode + +For a small project like easystroke, it makes little sense to split development up into a stable and a development tree. Nevertheless, some features may take a little more time to develop, be of questionable usefulness or too poorly documented even for my tastes. I'd also like to release early, release often. That's why I've relegated these features to an _experimental mode_, which can only be enabled on the command line by supplying the parameter '-e'. So if you're curious what this is about, be sure to check it out. Don't worry, your computer won't blow up. Comments on whether any of the experimental features are indispensable or completely useless or how they could be improved are always appreciated. + +Finally, a short description of the current experimental features: +* Minimum speed: Specifies the minimum speed that you need to move the pointer with in order for the gesture not to time out. If you don't move the for the amount of time that 'Timeout' is set to, the click is passed along to the application immediately. \ No newline at end of file diff --git a/docs/tips-and-tricks.md b/docs/tips-and-tricks.md new file mode 100644 index 00000000..b09075d8 --- /dev/null +++ b/docs/tips-and-tricks.md @@ -0,0 +1,98 @@ +Configure Tap Zones and use them as buttons and separate scroll wheels. I've detailed it here + +Configure Tap Zones- http://ubuntuforums.org/showthread.php?t=1824870 +Set up tap zones to perform buttons and scroll wheels- http://ubuntuforums.org/showthread.php?t=1859936 + +*Using Easystroke to perform like Scrybe Gesture Workflows — Searching and Shopping* + +First install xsel + + sudo apt-get install xsel + +we will be using a command type + +Example: searching for "obama" in wikipedia +in the command entry type: + + + google-chrome "http://en.wikipedia.org/w/index.php?title=Special:Search&search=`xsel -p | tr [:space:] +`" + + + +now choose a gesture, lets choose a shape `w` + +highlight a word and perform the gesture and you should be there. + +to get any other website search perform a search query "test" in there search engine i,e, youtube +which gives the result +http://www.youtube.com/results?search_query=test&aq=f + +now replace "test" with `xsel -p | tr [:space:] +` (with those little brackets) + +then your command will be + + + google-chrome "http://www.youtube.com/results?search_query=`xsel -p | tr [:space:] +`&aq=f" + + + +make sure you use the brackets for your url. + +any other search engines can be done using this. + +# General + +## Mapping mouse buttons to keyboard shortcuts + +If you have a mouse button that you don't need, you can use easystroke to remap it to any command or keyboard shortcut. Just add the button as an additional button (or use the gesture button if you don't want to use gestures). Since you don't want to use the button for gestures, select "Instant Gestures" on the bottom of the button dialog. To assign an action to the button, just press the button when recording a new gesture. To assign a modifier to the mouse button, you can use the "Ignore" action type. + +## Emulating a scroll wheel using a button + +If you don't have a scroll wheel, you can make easystroke emulate one by pressing a button and moving the cursor. Add the button as an additional button of type "instant gestures" as above, and record a new gesture by clicking the button, then change the action's type to "Scroll". + +## xte +_xte_ is a handy little command-line tool that can emulate key presses and mouse clicks. In Debian/Ubuntu, it can be found in the xautomation package. + +You can use _xte_ to execute a squence of key presses. For example, the following command will go 5 tabs to the right in firefox: + + xte 'keydown Control_L'; for i in `seq 1 5`; do xte 'key Page_Down'; done; xte 'keyup Control_L' + +Here's a command that will enter today's date into a document: + + xte "str `date +%D`" + + +## wmctrl +_wmctrl_ allows you to do various window manager actions from the command line. A useful feature is "wmctrl -a ", which will switch to a window containing the string in the title. For example, to activate a firefox window, and start firefox if there is no such window, use the following command: + + wmctrl -a Firefox || firefox + + +## GUI testing frameworks +GUI testing frameworks such as [dogtail](http://people.redhat.com/zcerza/dogtail/) and [LDTP](http://ldtp.freedesktop.org/wiki/) offer much better control over applications than what is possible by emitting key strokes, but they're also more difficult to use and they also require assistive technologies to be enabled. If you have a good example of what is possible with those tools, please add it here. + +# Wacom Tablet PCs + +## TPCButtons +Turn TPCButtons off, so that you can click the button on your pen without having to tap the pen at the same time. This can be done using the command + + xsetwacom set stylus TPCButton 0 + +or, permanently, by adding the line + + Option "TPCButton" "off" + +to the *last* "InputDevice" section pertaining to your tablet. Note that in order for this to be persistent through suspend or switching VTs, you'll need the latest linuxwacom driver from git ([relevant commit](http://git.debian.org/?p=collab-maint/linux-wacom.git;a=commit;h=4a3811a1c3120b1a50bc2fd6848ea18470ea6465)). See also [FeatureAdvancedGestures]. + +## Don't use Rotate Scripts +There are tons of applications out there that allow you to change screen resolution and rotation. However, as a tablet user you will also need tell the wacom driver to rotate pen input. So people ditch these applications and replace them by something much worse: Custom-made rotate scripts that must be used if you want to your pen to be usable after rotate - very annoying and cumbersome to set up. + +But Xrandr is perfectly capable of notifying applications of screen changes, so a much better solution is to have a tiny daemon that performs the necessary actions whenever the screen is rotated. The wacomrotate daemon is an example of this: It will both rotate the pen and, if you're running gnome, adjust the orientation of subpixel smoothing, which will make fonts less blurry. You can find the source at [github](http://github.com/thjaeger/wacomrotate/tree/master), and packages for jaunty and karmic in one of my [PPAs](https://launchpad.net/~thjaeger/+archive/tabletpc) + +# Useful Tablet PC apps + +These applications have nothing to do with easystroke per se, but I've found them highly valuable, so I'd like to spread the word. + * [xournal](http://xournal.sourceforge.net/) is a great note-taking application. It supports PDF annotation and can take advantage of the full digitizer resolution. + * [cellwriter](http://risujin.org/cellwriter) is a handwriting input panel/onscreen keyboard with a very pleasant and intuitive user interface. + * [Grab and Drag](http://grabanddrag.mozdev.org/) is a firefox add-on that makes scrolling with a pen a breeze. It also works for thunderbird, by the way. + * Many Tablet PCs come with high-resolution displays (145 dpi in case of the x61t and the LE1700) that can cause strain when used at the default font settings. The [NoSquint](http://urandom.ca/nosquint/) firefox extension allows you to set a default zoom setting for all web pages and separate settings for specific sites. \ No newline at end of file diff --git a/docs/translations.md b/docs/translations.md new file mode 100644 index 00000000..1dbeea21 --- /dev/null +++ b/docs/translations.md @@ -0,0 +1,32 @@ +There are two ways to contribute translations to easystroke: + +# Launchpad + +I've set up a launchpad project so that you can edit the translation strings using a simple web interface: + +https://translations.launchpad.net/easystroke/trunk/+pots/easystroke + +Before each release, I will pull in the latest translations from launchpad. + +To test your translations (assuming you're running a recent enough version of easystroke), download the .mo file from launchpad and copy it to /usr/share/locale/??/LC_MESSAGES/easystroke.mo, where ?? represents the language code. + +# Manual + +The downside to the launchpad approach is that you don't immediately see the effects of your translations. You can also directly edit translations in the source: First clone the easystroke repository (as explained in BuildInstructions). If there already is a translation file for your language (po/??.po), you can either edit the file by hand or use an po file editor such as gtranslator. Otherwise you need to base the file off the messages.pot file that can be built by typing 'make translate' (or just ask me to create a .po file for your language). To test your translations, you need to compile the po file ('make compile-translations') and then execute easystroke from the root directory of the repository. + +If you go this route, please check whether launchpad has updated translations first. If that's the case, either download the .po file directly from launchpad and place it in the po directory or ask me to import it into git. + +# Strings that need additional explanation + +## %1 "%2" (containing %3 %4) is about to be deleted +%1 is your translation of "The application" or "The group" + +%2 is the name of the application or group + +%3 is the number of actions + +%4 is your translation of "action"/"actions". + +# Completeness + +Note that I will only import translations into git and include them into official releases if they're reasonably complete. I believe that mixing two languages is more confusing to the user than having the whole interface in a foreign language. In Launchpad, you can tell whether your new translations have been exported by their color: green means the translations are in git, light blue and purple mean they are only in Launchpad. \ No newline at end of file From 8434144443a6090f91743136b2a71d3a0a690aef Mon Sep 17 00:00:00 2001 From: "berkeleybross@gmail.com" Date: Sat, 26 Dec 2020 23:07:43 +0000 Subject: [PATCH 02/69] Fix compile error --- actions.cc | 5 +++-- handler.cc | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/actions.cc b/actions.cc index 45c03761..10e3d517 100644 --- a/actions.cc +++ b/actions.cc @@ -23,6 +23,7 @@ #include "grabber.h" #include "cellrenderertextish.h" +#include #include bool TreeViewMulti::on_button_press_event(GdkEventButton* event) { @@ -54,7 +55,7 @@ void TreeViewMulti::on_drag_begin(const Glib::RefPtr &context) bool negate(bool b) { return !b; } TreeViewMulti::TreeViewMulti() : Gtk::TreeView(), pending(false) { - get_selection()->set_select_function(sigc::group(&negate, sigc::ref(pending))); + get_selection()->set_select_function([this](const Glib::RefPtr&, const Gtk::TreePath&, const bool&) { return !this->pending; }); } enum Type { COMMAND, KEY, TEXT, SCROLL, IGNORE, BUTTON, MISC }; @@ -967,4 +968,4 @@ const Glib::ustring Ignore::get_label() const { return ModAction::get_label(); else return _("Ignore"); -} +} \ No newline at end of file diff --git a/handler.cc b/handler.cc index 8830ea28..9e62c0db 100644 --- a/handler.cc +++ b/handler.cc @@ -533,7 +533,6 @@ class WaitForPongHandler : public Handler, protected Timeout { virtual Grabber::State grab_mode() { return parent->grab_mode(); } }; -static inline float abs(float x) { return x > 0 ? x : -x; } class AbstractScrollHandler : public Handler { bool have_x, have_y; @@ -1121,4 +1120,4 @@ void XState::run_action(RAction act) { if (IS_SCROLL(act)) return handler->replace_child(new ScrollHandler(mods)); act->run(); -} +} \ No newline at end of file From ba26574f3ee0648eff23a2d9773b02d9be7e28fa Mon Sep 17 00:00:00 2001 From: "berkeleybross@gmail.com" Date: Sun, 27 Dec 2020 00:02:31 +0000 Subject: [PATCH 03/69] Add script to build project --- build/build.sh | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100755 build/build.sh diff --git a/build/build.sh b/build/build.sh new file mode 100755 index 00000000..14491d18 --- /dev/null +++ b/build/build.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +set -e + +( + DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + cd $DIR/.. + + make -j2 +) \ No newline at end of file From 408e1c2a82781c5c3b83be637e30dd756cca8c8a Mon Sep 17 00:00:00 2001 From: "berkeleybross@gmail.com" Date: Sun, 27 Dec 2020 00:04:51 +0000 Subject: [PATCH 04/69] Moved project into sub folder --- .gitignore => service/.gitignore | 0 Makefile => service/Makefile | 0 actiondb.cc => service/actiondb.cc | 0 actiondb.h => service/actiondb.h | 0 actions.cc => service/actions.cc | 0 actions.h => service/actions.h | 0 annotate.cc => service/annotate.cc | 0 annotate.h => service/annotate.h | 0 cellrenderertextish.c => service/cellrenderertextish.c | 0 cellrenderertextish.h => service/cellrenderertextish.h | 0 cellrenderertextish.vala => service/cellrenderertextish.vala | 0 composite.cc => service/composite.cc | 0 composite.h => service/composite.h | 0 debug.mk.ex => service/debug.mk.ex | 0 easystroke.appdata.xml => service/easystroke.appdata.xml | 0 easystroke.desktop.in => service/easystroke.desktop.in | 0 easystroke.svg => service/easystroke.svg | 0 fire.cc => service/fire.cc | 0 fire.h => service/fire.h | 0 gesture.cc => service/gesture.cc | 0 gesture.h => service/gesture.h | 0 grabber.cc => service/grabber.cc | 0 grabber.h => service/grabber.h | 0 gui.glade => service/gui.glade | 0 handler.cc => service/handler.cc | 0 handler.h => service/handler.h | 0 main.cc => service/main.cc | 0 main.h => service/main.h | 0 {po => service/po}/ca.po | 0 {po => service/po}/cs.po | 0 {po => service/po}/de.po | 0 {po => service/po}/el.po | 0 {po => service/po}/es.po | 0 {po => service/po}/fi.po | 0 {po => service/po}/fr.po | 0 {po => service/po}/he.po | 0 {po => service/po}/hu.po | 0 {po => service/po}/it.po | 0 {po => service/po}/ja.po | 0 {po => service/po}/ko.po | 0 {po => service/po}/pl.po | 0 {po => service/po}/ru.po | 0 {po => service/po}/vi.po | 0 {po => service/po}/zh_CN.po | 0 {po => service/po}/zh_TW.po | 0 prefdb.cc => service/prefdb.cc | 0 prefdb.h => service/prefdb.h | 0 prefs.cc => service/prefs.cc | 0 prefs.h => service/prefs.h | 0 shape.cc => service/shape.cc | 0 shape.h => service/shape.h | 0 stats.cc => service/stats.cc | 0 stroke.c => service/stroke.c | 0 stroke.h => service/stroke.h | 0 trace.h => service/trace.h | 0 util.h => service/util.h | 0 var.h => service/var.h | 0 water.cc => service/water.cc | 0 water.h => service/water.h | 0 win.cc => service/win.cc | 0 win.h => service/win.h | 0 61 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => service/.gitignore (100%) rename Makefile => service/Makefile (100%) rename actiondb.cc => service/actiondb.cc (100%) rename actiondb.h => service/actiondb.h (100%) rename actions.cc => service/actions.cc (100%) rename actions.h => service/actions.h (100%) rename annotate.cc => service/annotate.cc (100%) rename annotate.h => service/annotate.h (100%) rename cellrenderertextish.c => service/cellrenderertextish.c (100%) rename cellrenderertextish.h => service/cellrenderertextish.h (100%) rename cellrenderertextish.vala => service/cellrenderertextish.vala (100%) rename composite.cc => service/composite.cc (100%) rename composite.h => service/composite.h (100%) rename debug.mk.ex => service/debug.mk.ex (100%) rename easystroke.appdata.xml => service/easystroke.appdata.xml (100%) rename easystroke.desktop.in => service/easystroke.desktop.in (100%) rename easystroke.svg => service/easystroke.svg (100%) rename fire.cc => service/fire.cc (100%) rename fire.h => service/fire.h (100%) rename gesture.cc => service/gesture.cc (100%) rename gesture.h => service/gesture.h (100%) rename grabber.cc => service/grabber.cc (100%) rename grabber.h => service/grabber.h (100%) rename gui.glade => service/gui.glade (100%) rename handler.cc => service/handler.cc (100%) rename handler.h => service/handler.h (100%) rename main.cc => service/main.cc (100%) rename main.h => service/main.h (100%) rename {po => service/po}/ca.po (100%) rename {po => service/po}/cs.po (100%) rename {po => service/po}/de.po (100%) rename {po => service/po}/el.po (100%) rename {po => service/po}/es.po (100%) rename {po => service/po}/fi.po (100%) rename {po => service/po}/fr.po (100%) rename {po => service/po}/he.po (100%) rename {po => service/po}/hu.po (100%) rename {po => service/po}/it.po (100%) rename {po => service/po}/ja.po (100%) rename {po => service/po}/ko.po (100%) rename {po => service/po}/pl.po (100%) rename {po => service/po}/ru.po (100%) rename {po => service/po}/vi.po (100%) rename {po => service/po}/zh_CN.po (100%) rename {po => service/po}/zh_TW.po (100%) rename prefdb.cc => service/prefdb.cc (100%) rename prefdb.h => service/prefdb.h (100%) rename prefs.cc => service/prefs.cc (100%) rename prefs.h => service/prefs.h (100%) rename shape.cc => service/shape.cc (100%) rename shape.h => service/shape.h (100%) rename stats.cc => service/stats.cc (100%) rename stroke.c => service/stroke.c (100%) rename stroke.h => service/stroke.h (100%) rename trace.h => service/trace.h (100%) rename util.h => service/util.h (100%) rename var.h => service/var.h (100%) rename water.cc => service/water.cc (100%) rename water.h => service/water.h (100%) rename win.cc => service/win.cc (100%) rename win.h => service/win.h (100%) diff --git a/.gitignore b/service/.gitignore similarity index 100% rename from .gitignore rename to service/.gitignore diff --git a/Makefile b/service/Makefile similarity index 100% rename from Makefile rename to service/Makefile diff --git a/actiondb.cc b/service/actiondb.cc similarity index 100% rename from actiondb.cc rename to service/actiondb.cc diff --git a/actiondb.h b/service/actiondb.h similarity index 100% rename from actiondb.h rename to service/actiondb.h diff --git a/actions.cc b/service/actions.cc similarity index 100% rename from actions.cc rename to service/actions.cc diff --git a/actions.h b/service/actions.h similarity index 100% rename from actions.h rename to service/actions.h diff --git a/annotate.cc b/service/annotate.cc similarity index 100% rename from annotate.cc rename to service/annotate.cc diff --git a/annotate.h b/service/annotate.h similarity index 100% rename from annotate.h rename to service/annotate.h diff --git a/cellrenderertextish.c b/service/cellrenderertextish.c similarity index 100% rename from cellrenderertextish.c rename to service/cellrenderertextish.c diff --git a/cellrenderertextish.h b/service/cellrenderertextish.h similarity index 100% rename from cellrenderertextish.h rename to service/cellrenderertextish.h diff --git a/cellrenderertextish.vala b/service/cellrenderertextish.vala similarity index 100% rename from cellrenderertextish.vala rename to service/cellrenderertextish.vala diff --git a/composite.cc b/service/composite.cc similarity index 100% rename from composite.cc rename to service/composite.cc diff --git a/composite.h b/service/composite.h similarity index 100% rename from composite.h rename to service/composite.h diff --git a/debug.mk.ex b/service/debug.mk.ex similarity index 100% rename from debug.mk.ex rename to service/debug.mk.ex diff --git a/easystroke.appdata.xml b/service/easystroke.appdata.xml similarity index 100% rename from easystroke.appdata.xml rename to service/easystroke.appdata.xml diff --git a/easystroke.desktop.in b/service/easystroke.desktop.in similarity index 100% rename from easystroke.desktop.in rename to service/easystroke.desktop.in diff --git a/easystroke.svg b/service/easystroke.svg similarity index 100% rename from easystroke.svg rename to service/easystroke.svg diff --git a/fire.cc b/service/fire.cc similarity index 100% rename from fire.cc rename to service/fire.cc diff --git a/fire.h b/service/fire.h similarity index 100% rename from fire.h rename to service/fire.h diff --git a/gesture.cc b/service/gesture.cc similarity index 100% rename from gesture.cc rename to service/gesture.cc diff --git a/gesture.h b/service/gesture.h similarity index 100% rename from gesture.h rename to service/gesture.h diff --git a/grabber.cc b/service/grabber.cc similarity index 100% rename from grabber.cc rename to service/grabber.cc diff --git a/grabber.h b/service/grabber.h similarity index 100% rename from grabber.h rename to service/grabber.h diff --git a/gui.glade b/service/gui.glade similarity index 100% rename from gui.glade rename to service/gui.glade diff --git a/handler.cc b/service/handler.cc similarity index 100% rename from handler.cc rename to service/handler.cc diff --git a/handler.h b/service/handler.h similarity index 100% rename from handler.h rename to service/handler.h diff --git a/main.cc b/service/main.cc similarity index 100% rename from main.cc rename to service/main.cc diff --git a/main.h b/service/main.h similarity index 100% rename from main.h rename to service/main.h diff --git a/po/ca.po b/service/po/ca.po similarity index 100% rename from po/ca.po rename to service/po/ca.po diff --git a/po/cs.po b/service/po/cs.po similarity index 100% rename from po/cs.po rename to service/po/cs.po diff --git a/po/de.po b/service/po/de.po similarity index 100% rename from po/de.po rename to service/po/de.po diff --git a/po/el.po b/service/po/el.po similarity index 100% rename from po/el.po rename to service/po/el.po diff --git a/po/es.po b/service/po/es.po similarity index 100% rename from po/es.po rename to service/po/es.po diff --git a/po/fi.po b/service/po/fi.po similarity index 100% rename from po/fi.po rename to service/po/fi.po diff --git a/po/fr.po b/service/po/fr.po similarity index 100% rename from po/fr.po rename to service/po/fr.po diff --git a/po/he.po b/service/po/he.po similarity index 100% rename from po/he.po rename to service/po/he.po diff --git a/po/hu.po b/service/po/hu.po similarity index 100% rename from po/hu.po rename to service/po/hu.po diff --git a/po/it.po b/service/po/it.po similarity index 100% rename from po/it.po rename to service/po/it.po diff --git a/po/ja.po b/service/po/ja.po similarity index 100% rename from po/ja.po rename to service/po/ja.po diff --git a/po/ko.po b/service/po/ko.po similarity index 100% rename from po/ko.po rename to service/po/ko.po diff --git a/po/pl.po b/service/po/pl.po similarity index 100% rename from po/pl.po rename to service/po/pl.po diff --git a/po/ru.po b/service/po/ru.po similarity index 100% rename from po/ru.po rename to service/po/ru.po diff --git a/po/vi.po b/service/po/vi.po similarity index 100% rename from po/vi.po rename to service/po/vi.po diff --git a/po/zh_CN.po b/service/po/zh_CN.po similarity index 100% rename from po/zh_CN.po rename to service/po/zh_CN.po diff --git a/po/zh_TW.po b/service/po/zh_TW.po similarity index 100% rename from po/zh_TW.po rename to service/po/zh_TW.po diff --git a/prefdb.cc b/service/prefdb.cc similarity index 100% rename from prefdb.cc rename to service/prefdb.cc diff --git a/prefdb.h b/service/prefdb.h similarity index 100% rename from prefdb.h rename to service/prefdb.h diff --git a/prefs.cc b/service/prefs.cc similarity index 100% rename from prefs.cc rename to service/prefs.cc diff --git a/prefs.h b/service/prefs.h similarity index 100% rename from prefs.h rename to service/prefs.h diff --git a/shape.cc b/service/shape.cc similarity index 100% rename from shape.cc rename to service/shape.cc diff --git a/shape.h b/service/shape.h similarity index 100% rename from shape.h rename to service/shape.h diff --git a/stats.cc b/service/stats.cc similarity index 100% rename from stats.cc rename to service/stats.cc diff --git a/stroke.c b/service/stroke.c similarity index 100% rename from stroke.c rename to service/stroke.c diff --git a/stroke.h b/service/stroke.h similarity index 100% rename from stroke.h rename to service/stroke.h diff --git a/trace.h b/service/trace.h similarity index 100% rename from trace.h rename to service/trace.h diff --git a/util.h b/service/util.h similarity index 100% rename from util.h rename to service/util.h diff --git a/var.h b/service/var.h similarity index 100% rename from var.h rename to service/var.h diff --git a/water.cc b/service/water.cc similarity index 100% rename from water.cc rename to service/water.cc diff --git a/water.h b/service/water.h similarity index 100% rename from water.h rename to service/water.h diff --git a/win.cc b/service/win.cc similarity index 100% rename from win.cc rename to service/win.cc diff --git a/win.h b/service/win.h similarity index 100% rename from win.h rename to service/win.h From 47feabed025eaeefc50bfe92fdcb38d5375a7675 Mon Sep 17 00:00:00 2001 From: "berkeleybross@gmail.com" Date: Sun, 27 Dec 2020 00:15:01 +0000 Subject: [PATCH 05/69] Updated licenses and notices --- LICENSE.md | 7 ++++ LICENSE => NOTICE.md | 10 +++++ README.md | 67 +++------------------------------- changelog => docs/changelog.md | 34 +++++++++++++++++ 4 files changed, 56 insertions(+), 62 deletions(-) create mode 100644 LICENSE.md rename LICENSE => NOTICE.md (70%) rename changelog => docs/changelog.md (52%) diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..03c3660b --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,7 @@ +Copyright (c) 2020, James Ratcliffe + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/LICENSE b/NOTICE.md similarity index 70% rename from LICENSE rename to NOTICE.md index 08e60a63..69f5729f 100644 --- a/LICENSE +++ b/NOTICE.md @@ -1,3 +1,13 @@ +# Notices for easystroke + +This project is licensed under the licensing terms described in [./LICENSE.md](./LICENSE.md) + +## Third-party Content + +### easystroke (original) + +This project was based on easystroke by Thomas Jaegar under the following [license](https://github.com/thjaeger/easystroke/blob/master/LICENSE): + Copyright (c) 2008-2009, Thomas Jaeger Permission to use, copy, modify, and/or distribute this software for any diff --git a/README.md b/README.md index 2e0cd7a7..6dab8137 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,14 @@ Easystroke is a gesture-recognition application for X11. Gestures or strokes are movements that you make with you mouse (or your pen, finger etc.) while holding down a specific mouse button. Easystroke will execute certain actions if it recognizes the stroke; currently easystroke can emulate key presses, execute shell commands, hold down modifiers and emulate a scroll wheel. The program was designed with Tablet PCs in mind and can be used effectively even without access to a keyboard. Easystroke tries to provide an intuitive and efficient user interface, while at the same time being highly configurable and offering many advanced features. -# News - * [2018-12-05] Maintenance Update. As development has stalled, and the original Author is not available, but the program is still widely used, an update in terms of bugfixing and maintenance of the code has been attempted. See [BuildInstructions](https://github.com/thjaeger/easystroke/wiki/BuildInstructions) for more information. - * [2013-03-27] Released 0.6.0 This release contains few user-visible changes beside a few bugfixes. Easystroke has been ported to gtk3 and event handling code has been refactored in anticipation of touch support. Unfortunately, touch grab support in the X server is still too fragile for easystroke to be able to take advantage of it (you can preview touch support on the 'touch' branch). - * [2012-10-06] Released 0.5.6 This release incorporates fixes for most of the issues that have come up over the last year or so. It also adds Hungarian translations. Stay tuned, 0.6.0 with gtk3 and improved touch support will be released soon. The 0.5 branch will not see any new features, only bugfixes if necessary. - * [2011-08-16] Released 0.5.5.1 This fixes a build failure in 0.5.5. - * [2011-08-16] Released 0.5.5 This release adds per-device timeout settings. An extra click is now required for button actions to improve precision and scroll actions use XI2 Raw events so that the cursor is not confined to the screen. The release also includes various bugfixes and adds Catalan, Finnish, Korean and Traditional Chinese translations. - * [2010-07-27] Released 0.5.4 Just a few minor bug fixes. - * [2010-02-13] Released 0.5.3 This release adds an option to move the cursor back to the original position after each gesture and fixes a crash when a gesture times out during recording, along with a few minor bugs. - * [2010-01-09] Released 0.4.11 This release only fixes one bug that would cause a wrong key to be emitted under certain circumstances. - * [2010-01-02] Released 0.5.2 This release adds Hebrew translations and should improve keystroke handling. - * [2009-11-19] Released 0.4.10 This is a bugfix release for the non-xi2 branch of easystroke. It also adds Hebrew translations. - * [2009-10-27] Released 0.5.0 This release is a port of easystroke to XI 2 (it doesn't add any new features). You need a recent X server (at least 1.7) to run this version. Most people will probably want to stick with 0.4.9 for now. - * [2009-08-19] Released 0.4.9 This release fixes a bug regarding application groups and adds Polish translations. - * [2009-08-15] Released 0.4.8 This release fixes a long-standing bug that would prevent easystroke from working when only application-dependent gestures were defined. - * [2009-07-05] Released 0.4.7 This release adds a workaround an (1.6) X server bug causing problems with vertical gestures on some devices. - * [2009-06-16] Released 0.4.6 This release adds Russian translations and works around two issues on karmic and amd64 arch. - * [2009-06-01] Released 0.4.5 This release fixes one crash-bug and adds Chinese translations. - * [2009-05-12] Released 0.4.4 This fixes two annoying bugs in 0.4.3 - * [2009-05-09] Released 0.4.3 This is mostly a bugfix release, but it also improves drag-and-drop behavior - * [2009-05-09] Released 0.4.2 This is a bugfix-only version of 0.4.3 that I accidentally uploaded, please ignore. - * [2009-03-16] Released 0.4.1.1 This is a bugfix release. - * [2009-02-20] Released 0.4.1 This release introduces a new stroke-matching algorithm, adds click-and-hold gestures and contains various bug fixes. - * [2009-02-06] Released 0.4.0 This version adds support for the upcoming X Server 1.6, comes with Czech, German, Italian and Spanish translations and makes it possible to use multiple gesture buttons. - * [2008-12-22] Released 0.3.1 We now have a much better method for drawing strokes on composited desktops, but this release also contains a few bugfixes and an option to autostart the program. - * [2008-11-07] Released 0.3.0 This release introduces many new features, most notably application-dependent gestures. See the [changelog](http://github.com/thjaeger/easystroke/tree/master%2Fchangelog?raw=true) for details - * [2008-09-18] Released 0.2.2.1 This is a bug fix release, resolving a few minor issues. - * [2008-08-17] Released 0.2.2 This version features improved visual feedback, configurable gesture timeout, better pointer tracking and many minor improvements. - * [2008-08-06] Released 0.2.1.1. This just adds license information to the source files in order to facilitate Ubuntu packaging. An update is not necessary. - * [2008-08-03] Released 0.2.1, correcting some silly Makefile mistakes. - * [2008-08-03] Released 0.2.0. This version contains many tablet-related improvements and introduces [FeatureAdvancedGestures]. Please allow a few days for the documentation to be updated to the current version. - * [2008-06-22] Released 0.1.2. Fixes a few minor UI glitches. - * [2008-06-19] Released 0.1.1. This version introduces [FeatureClickDuringStroke], which allows you to emulate a mouse click by clicking a second button during a stroke (which can essentially turn a one-button tablet pen into three-button mouse). - * [2008-06-14] Released 0.1. This is first public release. - -# Download - -Releases can be found on the [sourceforge download page](http://sourceforge.net/project/showfiles.php?group_id=229797). See the [BuildInstructions Build Instructions] to learn how to build easystroke from source or see below if there are pre-built packages available for your distribution. - -## Ubuntu -You can find i386 and amd64 .debs for Ubuntu Karmic and Hardy on the [sourceforge download page](http://sourceforge.net/project/showfiles.php?group_id=229797). These packages, along with packages for Jaunty and Lucid, are also available through the [easystroke Lauchpad PPA](https://launchpad.net/~easystroke/+archive/ppa). Just add the following two lines to your /etc/apt/sources.list file (replace karmic with the verion of ubuntu that you're running). - - deb http://ppa.launchpad.net/easystroke/ppa/ubuntu karmic main - deb-src http://ppa.launchpad.net/easystroke/ppa/ubuntu karmic main - - -## OpenSUSE - -Easystroke is part of the openSUSE Contrib repository and the X11:Utilities devel -repository, see the [openSUSE Build Service](http://software.opensuse.org/search?baseproject=ALL&p=1&q=easystroke) for a list available builds. - -# Development - -You can fetch the [latest development tree](http://github.com/thjaeger/easystroke/tree/master) using git: - - git clone git://github.com/thjaeger/easystroke.git - - # Documentation -[Documentation](Documentation) +[Documentation](./docs/index.md) -[Tips & Tricks](TipsAndTricks) +[Tips & Tricks](./docs/tips-and-tricks.md) -[Build Instructions](BuildInstructions) +[Build Instructions](./docs/build-instructions.md) -Easystroke is distributed under the [ISC License](http://github.com/thjaeger/easystroke/tree/master%2FLICENSE?raw=true). +Easystroke is distributed under the [MIT License](./LICENSE.md). # How can I help out? @@ -77,4 +20,4 @@ To find out how to translate easystroke into your native language, see [Translat # Author -Easystroke is being developed by [Thomas Jaeger](mailto:ThJaeger@gmail.com). Comments, suggestions, bug reports, patches and criticism are very welcome! \ No newline at end of file +Easystroke is being developed by [James Ratcliffe](mailto:berkeleybross@gmail.com). Comments, suggestions, bug reports, patches and criticism are very welcome! diff --git a/changelog b/docs/changelog.md similarity index 52% rename from changelog rename to docs/changelog.md index d54dd8ce..371119ad 100644 --- a/changelog +++ b/docs/changelog.md @@ -1,3 +1,37 @@ + * [2018-12-05] Maintenance Update. As development has stalled, and the original Author is not available, but the program is still widely used, an update in terms of bugfixing and maintenance of the code has been attempted. See [BuildInstructions](https://github.com/thjaeger/easystroke/wiki/BuildInstructions) for more information. + * [2013-03-27] Released 0.6.0 This release contains few user-visible changes beside a few bugfixes. Easystroke has been ported to gtk3 and event handling code has been refactored in anticipation of touch support. Unfortunately, touch grab support in the X server is still too fragile for easystroke to be able to take advantage of it (you can preview touch support on the 'touch' branch). + * [2012-10-06] Released 0.5.6 This release incorporates fixes for most of the issues that have come up over the last year or so. It also adds Hungarian translations. Stay tuned, 0.6.0 with gtk3 and improved touch support will be released soon. The 0.5 branch will not see any new features, only bugfixes if necessary. + * [2011-08-16] Released 0.5.5.1 This fixes a build failure in 0.5.5. + * [2011-08-16] Released 0.5.5 This release adds per-device timeout settings. An extra click is now required for button actions to improve precision and scroll actions use XI2 Raw events so that the cursor is not confined to the screen. The release also includes various bugfixes and adds Catalan, Finnish, Korean and Traditional Chinese translations. + * [2010-07-27] Released 0.5.4 Just a few minor bug fixes. + * [2010-02-13] Released 0.5.3 This release adds an option to move the cursor back to the original position after each gesture and fixes a crash when a gesture times out during recording, along with a few minor bugs. + * [2010-01-09] Released 0.4.11 This release only fixes one bug that would cause a wrong key to be emitted under certain circumstances. + * [2010-01-02] Released 0.5.2 This release adds Hebrew translations and should improve keystroke handling. + * [2009-11-19] Released 0.4.10 This is a bugfix release for the non-xi2 branch of easystroke. It also adds Hebrew translations. + * [2009-10-27] Released 0.5.0 This release is a port of easystroke to XI 2 (it doesn't add any new features). You need a recent X server (at least 1.7) to run this version. Most people will probably want to stick with 0.4.9 for now. + * [2009-08-19] Released 0.4.9 This release fixes a bug regarding application groups and adds Polish translations. + * [2009-08-15] Released 0.4.8 This release fixes a long-standing bug that would prevent easystroke from working when only application-dependent gestures were defined. + * [2009-07-05] Released 0.4.7 This release adds a workaround an (1.6) X server bug causing problems with vertical gestures on some devices. + * [2009-06-16] Released 0.4.6 This release adds Russian translations and works around two issues on karmic and amd64 arch. + * [2009-06-01] Released 0.4.5 This release fixes one crash-bug and adds Chinese translations. + * [2009-05-12] Released 0.4.4 This fixes two annoying bugs in 0.4.3 + * [2009-05-09] Released 0.4.3 This is mostly a bugfix release, but it also improves drag-and-drop behavior + * [2009-05-09] Released 0.4.2 This is a bugfix-only version of 0.4.3 that I accidentally uploaded, please ignore. + * [2009-03-16] Released 0.4.1.1 This is a bugfix release. + * [2009-02-20] Released 0.4.1 This release introduces a new stroke-matching algorithm, adds click-and-hold gestures and contains various bug fixes. + * [2009-02-06] Released 0.4.0 This version adds support for the upcoming X Server 1.6, comes with Czech, German, Italian and Spanish translations and makes it possible to use multiple gesture buttons. + * [2008-12-22] Released 0.3.1 We now have a much better method for drawing strokes on composited desktops, but this release also contains a few bugfixes and an option to autostart the program. + * [2008-11-07] Released 0.3.0 This release introduces many new features, most notably application-dependent gestures. See the [changelog](http://github.com/thjaeger/easystroke/tree/master%2Fchangelog?raw=true) for details + * [2008-09-18] Released 0.2.2.1 This is a bug fix release, resolving a few minor issues. + * [2008-08-17] Released 0.2.2 This version features improved visual feedback, configurable gesture timeout, better pointer tracking and many minor improvements. + * [2008-08-06] Released 0.2.1.1. This just adds license information to the source files in order to facilitate Ubuntu packaging. An update is not necessary. + * [2008-08-03] Released 0.2.1, correcting some silly Makefile mistakes. + * [2008-08-03] Released 0.2.0. This version contains many tablet-related improvements and introduces [FeatureAdvancedGestures]. Please allow a few days for the documentation to be updated to the current version. + * [2008-06-22] Released 0.1.2. Fixes a few minor UI glitches. + * [2008-06-19] Released 0.1.1. This version introduces [FeatureClickDuringStroke], which allows you to emulate a mouse click by clicking a second button during a stroke (which can essentially turn a one-button tablet pen into three-button mouse). + * [2008-06-14] Released 0.1. This is first public release. + + 2013-03-27 Release 0.6.0 * Update easystroke to gtk3 * Refactor event handling code From ff3cc10403859c60308a48636eddee4b9b6f7bf5 Mon Sep 17 00:00:00 2001 From: "berkeleybross@gmail.com" Date: Sun, 27 Dec 2020 00:15:23 +0000 Subject: [PATCH 06/69] Fixed build script --- build/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/build.sh b/build/build.sh index 14491d18..f4b5c4b1 100755 --- a/build/build.sh +++ b/build/build.sh @@ -3,7 +3,7 @@ set -e ( DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - cd $DIR/.. + cd $DIR/../service make -j2 ) \ No newline at end of file From 3fbcfa4eb868169d885f828e00b3d00ec40e48ca Mon Sep 17 00:00:00 2001 From: "berkeleybross@gmail.com" Date: Sun, 27 Dec 2020 00:28:03 +0000 Subject: [PATCH 07/69] Started renaming to easy gesture --- NOTICE.md | 4 +- README.md | 12 +-- build/run-local.sh | 12 +++ docs/advanced-gestures.md | 4 +- docs/build-instructions.md | 92 +--------------- docs/changelog.md | 212 ------------------------------------- docs/index.md | 34 +++--- docs/tips-and-tricks.md | 8 +- docs/translations.md | 6 +- service/.gitignore | 1 + service/Makefile | 2 +- service/grabber.cc | 4 +- 12 files changed, 49 insertions(+), 342 deletions(-) create mode 100755 build/run-local.sh diff --git a/NOTICE.md b/NOTICE.md index 69f5729f..93639f4c 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -1,10 +1,10 @@ -# Notices for easystroke +# Notices for Easy Gesture This project is licensed under the licensing terms described in [./LICENSE.md](./LICENSE.md) ## Third-party Content -### easystroke (original) +### easystroke This project was based on easystroke by Thomas Jaegar under the following [license](https://github.com/thjaeger/easystroke/blob/master/LICENSE): diff --git a/README.md b/README.md index 6dab8137..19b8452f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Easystroke is a gesture-recognition application for X11. Gestures or strokes are movements that you make with you mouse (or your pen, finger etc.) while holding down a specific mouse button. Easystroke will execute certain actions if it recognizes the stroke; currently easystroke can emulate key presses, execute shell commands, hold down modifiers and emulate a scroll wheel. The program was designed with Tablet PCs in mind and can be used effectively even without access to a keyboard. Easystroke tries to provide an intuitive and efficient user interface, while at the same time being highly configurable and offering many advanced features. +Easy Gesture is a gesture-recognition application for X11. Gestures or strokes are movements that you make with you mouse (or your pen, finger etc.) while holding down a specific mouse button. Easy Gesture will execute certain actions if it recognizes the stroke; currently Easy Gesture can emulate key presses, execute shell commands, hold down modifiers and emulate a scroll wheel. The program was designed with Tablet PCs in mind and can be used effectively even without access to a keyboard. Easy Gesture tries to provide an intuitive and efficient user interface, while at the same time being highly configurable and offering many advanced features. # Documentation @@ -8,16 +8,12 @@ Easystroke is a gesture-recognition application for X11. Gestures or strokes are [Build Instructions](./docs/build-instructions.md) -Easystroke is distributed under the [MIT License](./LICENSE.md). +Easy Gesture is distributed under the [MIT License](./LICENSE.md). # How can I help out? -If you encounter any bugs or problems with easystroke, please report them, preferably using [trac](https://sourceforge.net/apps/trac/easystroke/report) (be sure to assign the ticket to me (thjaeger), so that I get notified by e-mail). Feature suggestions are also welcome, but note that I only have limited time to implement new features (usually, changes in the X server are enough to keep me busy). - -The easystroke website is a wiki that anyone can edit (with the exception of the front page). Please feel free to add any information (tutorials, documentation, etc.) that might be interesting to other users. Work on the [Documentation](Documentation) page is especially appreciated, I don't have the time and patience to keep it up to date. - -To find out how to translate easystroke into your native language, see [Translations](Translations). +If you encounter any bugs or problems with Easy Gesture, please report them as a github issue. # Author -Easystroke is being developed by [James Ratcliffe](mailto:berkeleybross@gmail.com). Comments, suggestions, bug reports, patches and criticism are very welcome! +Easy Gesture is being developed by [James Ratcliffe](mailto:berkeleybross@gmail.com). Comments, suggestions, bug reports, patches and criticism are very welcome! diff --git a/build/run-local.sh b/build/run-local.sh new file mode 100755 index 00000000..9928cfc7 --- /dev/null +++ b/build/run-local.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -e + +( + DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + cd $DIR + ./build.sh + + cd $DIR/../service + + ./easy-gesture +) \ No newline at end of file diff --git a/docs/advanced-gestures.md b/docs/advanced-gestures.md index 7e6c33f2..42954b88 100644 --- a/docs/advanced-gestures.md +++ b/docs/advanced-gestures.md @@ -13,10 +13,10 @@ The feature can be used in two different ways, depending on the value of the opt # Examples ## Emulate a right-click on a Tablet PC pen -A big shortcoming of most Tablet PC pens is that they only two "buttons": The tip of the pen and one button on the side. You can set up easystroke to treat pressing the side button, followed by a regular click as a right click. Just open the "Actions" tab and add a new action. Choose "Button" as its type and then select the right button (Button3). Finally you need to record the stroke, which is just an unreleased middle-click followed by a right-click. +A big shortcoming of most Tablet PC pens is that they only two "buttons": The tip of the pen and one button on the side. You can set up Easy Gesture to treat pressing the side button, followed by a regular click as a right click. Just open the "Actions" tab and add a new action. Choose "Button" as its type and then select the right button (Button3). Finally you need to record the stroke, which is just an unreleased middle-click followed by a right-click. ## Alt+Tab switching in Compiz -Setting up regular gestures to switch between windows by pressing Alt+Tab won't work very well: The problem is that this requires holding down the Alt key, but regular gestures have to release the key immediately. This is where advanced gestures come in: Now the modifiers associated to the last action will be held down until the gesture is over, i.e. until you release the gesture trigger button. As an example, let's set up easystroke to allow Alt+Tab switching by performing an "up"-stroke (without releasing the trigger button), followed by flicking the scroll wheel. Make sure that the "Ignore..." option described above is disabled. This time we need to add two actions, one for the up button (Button4) and one for the down (Button5). Set them up to be key actions, pressing Alt+Tab and Alt+Shift+Tab, and then record the two strokes. Not that you will have to perform the stroke for both mouse buttons, once followed by an up flick and once by a down flick, but when you're actually executing the action multiple times in a row, you only need to perform the stroke once. +Setting up regular gestures to switch between windows by pressing Alt+Tab won't work very well: The problem is that this requires holding down the Alt key, but regular gestures have to release the key immediately. This is where advanced gestures come in: Now the modifiers associated to the last action will be held down until the gesture is over, i.e. until you release the gesture trigger button. As an example, let's set up Easy Gesture to allow Alt+Tab switching by performing an "up"-stroke (without releasing the trigger button), followed by flicking the scroll wheel. Make sure that the "Ignore..." option described above is disabled. This time we need to add two actions, one for the up button (Button4) and one for the down (Button5). Set them up to be key actions, pressing Alt+Tab and Alt+Shift+Tab, and then record the two strokes. Not that you will have to perform the stroke for both mouse buttons, once followed by an up flick and once by a down flick, but when you're actually executing the action multiple times in a row, you only need to perform the stroke once. # Preparation diff --git a/docs/build-instructions.md b/docs/build-instructions.md index 697dca71..5aa9f2e3 100644 --- a/docs/build-instructions.md +++ b/docs/build-instructions.md @@ -1,75 +1,10 @@ -Easystroke is written in C++ and uses gtkmm for its GUI, but it also depends on the availability of several X11 extensions (Xtst, Xrandr and Xinput) and on the boost::serialization library. Installation of the libraries is distribution-specific. Please feel free to add instructions for your distro of choice. +Easy Gesture is written in C++ and uses gtkmm for its GUI, but it also depends on the availability of several X11 extensions (Xtst, Xrandr and Xinput) and on the boost::serialization library. Installation of the libraries is distribution-specific. Please feel free to add instructions for your distro of choice. # Debian/Ubuntu sudo apt-get install g++ libboost-serialization-dev libgtkmm-3.0-dev libxtst-dev libdbus-glib-1-dev intltool xserver-xorg-dev -or - - - sudo apt-get build-dep easystroke - -NOTE: Easystroke 5.x and below need libgtkmm-2.4-dev to build, not 3.0. - -# Fedora - - yum install gcc-c++ gtkmm30-devel dbus-glib-devel boost-devel libXtst-devel intltool - -NOTE: You might have to install 'xorg-x11-server-devel' for easystroke to compile probably (I had to). - -# OpenSUSE - - zypper in make gcc gcc-c++ gtkmm2-devel glib2-devel dbus-1-glib-devel boost-devel intltool - -NOTE: You might have to install 'xorg-x11-server-sdk' to successfully build on 12.X. -# Pardus - - pisi it make gcc gtkmm boost-devel intltool - -For Pardus, you also have to add -lXi to the LIBS row in the Makefile in order to get the app to compile. - # Releases -~~[Sourceforge download page](http://sourceforge.net/project/showfiles.php?group_id=229797)~~ - -NOTE: As for now, easystroke is in an unmaintained state. - -- The original author is not available. -- The last release was on 23. March 2013, so ~6 Years ago. -- Even the master tree is not build-able any more without patches from unmerged pull requests. -- As we do not have the credentials for this repository and the sourceforge page, an alternative solution has to be found. -- Many distributions still build their packages from 0.6.0 release, which causes numerous problems. - - A list of the commits to git master since release can be found [here](https://github.com/thjaeger/easystroke/pull/10#issuecomment-444132355) - - On Ubuntu's bug tracker for example, there are numerous bug entries where fixes are available, but they are not applied there. - -**The steady flow of pull requests nevertheless shows the interest in this unique program** - -- Preliminary binary bugfix-release of 2018/12/05: [AppImage](http://openartisthq.org/easystroke/easystroke-0.6.0-1ubuntu12-x86_64.AppImage) (built on Ubuntu 18.04; easystroke should run directly by making it executable and double clicking it.) - -- Preliminary Debian package release with all patches applied: -[easystroke_0.6.0-0ubuntu8_amd64.deb](http://openartisthq.org/easystroke/easystroke_0.6.0-0ubuntu8_amd64.deb) (built on Ubuntu 18.04) - -- Preliminary source-code bugfix-release of 2018/12/05: [patched-easystroke-master.tar.bz2](http://openartisthq.org/easystroke/patched-easystroke-master.tar.bz2) (already patched, patches included for reference) - - - Short instructions for compiling (after you installed the build-dependencies for your distribution as stated above) : - - ``` - wget http://openartisthq.org/easystroke/patched-easystroke-master.tar.bz2 - tar xvjf patched-easystroke-master.tar.bz2 - cd patched-easystroke-master/easystroke - make - ``` - - then run it with - `./easystroke` - - or install it to /usr/local with - `sudo make install` - - (in case your distribution does not have sudo installed, it's obviously just "make install" - - - - - These patches were applied on top of [git master](https://github.com/thjaeger/easystroke/): @@ -83,28 +18,3 @@ NOTE: As for now, easystroke is in an unmaintained state. A list of all available Patches can be found [here](https://github.com/thjaeger/easystroke/pull/10#issuecomment-444132355) for now. - -Detailed instructions to follow. - -# Development Tree - -As development is stalled, the following section is not relevant for now. - -~~Most users will probably want to use a released version, so they can skip this section. However, there are a few reasons why someone would use the latest development version and you are absolutely encouraged to do so.~~ - - * ~~You want to get a sneak preview of the awesome features that are planned for the next release.~~ - * ~~You want to help me out by trying to catch bugs before they make it into a release. This is greatly appreciated.~~ - * ~~You want to send me a patch.~~ - -~~Please always *keep a backup of your .easystroke configuration directory*, as the file format is often unstable during development and it is usually not possible to go back to the stable release once the configuration has been saved in a newer file format.~~ - -Note that some advanced features are only available if easystroke is started with the -e command line option. -______________________ - -Easystroke uses git for revision control. To fetch the development tree for the first time, type - - git clone git://github.com/thjaeger/easystroke.git - -which will create a subdirectory 'easystroke' containing the sources. You can update to the latest tree anytime by changing into that directory and typing 'git pull'. - -Now we're ready to build the program. Change into the easystroke directory and type 'make -j2'. This will create an executable file that you can either run directly or copy into your $PATH (easystroke does not require additional files to be installed), but of course you can also use 'make install' to install the program to /usr/local/bin. You can also create a small manpage using help2man by typing 'make man'. \ No newline at end of file diff --git a/docs/changelog.md b/docs/changelog.md index 371119ad..e69de29b 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,212 +0,0 @@ - * [2018-12-05] Maintenance Update. As development has stalled, and the original Author is not available, but the program is still widely used, an update in terms of bugfixing and maintenance of the code has been attempted. See [BuildInstructions](https://github.com/thjaeger/easystroke/wiki/BuildInstructions) for more information. - * [2013-03-27] Released 0.6.0 This release contains few user-visible changes beside a few bugfixes. Easystroke has been ported to gtk3 and event handling code has been refactored in anticipation of touch support. Unfortunately, touch grab support in the X server is still too fragile for easystroke to be able to take advantage of it (you can preview touch support on the 'touch' branch). - * [2012-10-06] Released 0.5.6 This release incorporates fixes for most of the issues that have come up over the last year or so. It also adds Hungarian translations. Stay tuned, 0.6.0 with gtk3 and improved touch support will be released soon. The 0.5 branch will not see any new features, only bugfixes if necessary. - * [2011-08-16] Released 0.5.5.1 This fixes a build failure in 0.5.5. - * [2011-08-16] Released 0.5.5 This release adds per-device timeout settings. An extra click is now required for button actions to improve precision and scroll actions use XI2 Raw events so that the cursor is not confined to the screen. The release also includes various bugfixes and adds Catalan, Finnish, Korean and Traditional Chinese translations. - * [2010-07-27] Released 0.5.4 Just a few minor bug fixes. - * [2010-02-13] Released 0.5.3 This release adds an option to move the cursor back to the original position after each gesture and fixes a crash when a gesture times out during recording, along with a few minor bugs. - * [2010-01-09] Released 0.4.11 This release only fixes one bug that would cause a wrong key to be emitted under certain circumstances. - * [2010-01-02] Released 0.5.2 This release adds Hebrew translations and should improve keystroke handling. - * [2009-11-19] Released 0.4.10 This is a bugfix release for the non-xi2 branch of easystroke. It also adds Hebrew translations. - * [2009-10-27] Released 0.5.0 This release is a port of easystroke to XI 2 (it doesn't add any new features). You need a recent X server (at least 1.7) to run this version. Most people will probably want to stick with 0.4.9 for now. - * [2009-08-19] Released 0.4.9 This release fixes a bug regarding application groups and adds Polish translations. - * [2009-08-15] Released 0.4.8 This release fixes a long-standing bug that would prevent easystroke from working when only application-dependent gestures were defined. - * [2009-07-05] Released 0.4.7 This release adds a workaround an (1.6) X server bug causing problems with vertical gestures on some devices. - * [2009-06-16] Released 0.4.6 This release adds Russian translations and works around two issues on karmic and amd64 arch. - * [2009-06-01] Released 0.4.5 This release fixes one crash-bug and adds Chinese translations. - * [2009-05-12] Released 0.4.4 This fixes two annoying bugs in 0.4.3 - * [2009-05-09] Released 0.4.3 This is mostly a bugfix release, but it also improves drag-and-drop behavior - * [2009-05-09] Released 0.4.2 This is a bugfix-only version of 0.4.3 that I accidentally uploaded, please ignore. - * [2009-03-16] Released 0.4.1.1 This is a bugfix release. - * [2009-02-20] Released 0.4.1 This release introduces a new stroke-matching algorithm, adds click-and-hold gestures and contains various bug fixes. - * [2009-02-06] Released 0.4.0 This version adds support for the upcoming X Server 1.6, comes with Czech, German, Italian and Spanish translations and makes it possible to use multiple gesture buttons. - * [2008-12-22] Released 0.3.1 We now have a much better method for drawing strokes on composited desktops, but this release also contains a few bugfixes and an option to autostart the program. - * [2008-11-07] Released 0.3.0 This release introduces many new features, most notably application-dependent gestures. See the [changelog](http://github.com/thjaeger/easystroke/tree/master%2Fchangelog?raw=true) for details - * [2008-09-18] Released 0.2.2.1 This is a bug fix release, resolving a few minor issues. - * [2008-08-17] Released 0.2.2 This version features improved visual feedback, configurable gesture timeout, better pointer tracking and many minor improvements. - * [2008-08-06] Released 0.2.1.1. This just adds license information to the source files in order to facilitate Ubuntu packaging. An update is not necessary. - * [2008-08-03] Released 0.2.1, correcting some silly Makefile mistakes. - * [2008-08-03] Released 0.2.0. This version contains many tablet-related improvements and introduces [FeatureAdvancedGestures]. Please allow a few days for the documentation to be updated to the current version. - * [2008-06-22] Released 0.1.2. Fixes a few minor UI glitches. - * [2008-06-19] Released 0.1.1. This version introduces [FeatureClickDuringStroke], which allows you to emulate a mouse click by clicking a second button during a stroke (which can essentially turn a one-button tablet pen into three-button mouse). - * [2008-06-14] Released 0.1. This is first public release. - - -2013-03-27 Release 0.6.0 - * Update easystroke to gtk3 - * Refactor event handling code - * Port CellRendererTextish to vala to make it work again - * Make unminimize work right - -2012-10-06 Release 0.5.6 - * Keycode translation improvements - * Allow gestures to be distinguished by modifiers - * Improve detection current application - * Minor UI improvements - * Make Bell work again - * Add Hungarian translations - -2011-08-16 Released 0.5.5.1 - * Fix build failure due to missing import - -2011-08-16 Released 0.5.5 - * Different timeout settings for individual devices - * Change the way button action work to make them more touchscreen - friendly - * Improve Application detection - * Use raw events for scrolling - * Add Catalan, Finnish, Korean and Traditional Chinese translations - * Make fire and water work with compiz 0.9 - * Add options to not use dbus and to start easystroke disabled - -2010-07-27 Released 0.5.4 - * Don't start with the config dialog unless -g is passed on the - command line - * Key action and cursor position fixes - * Update Russian translations - -2010-02-13 Released 0.5.3 - * Fix a crash when recording gestures - * Report window manager frames as such in the application list - * Improve the recognition algorithm - * Add an option to move the cursor back to the original position - -2010-01-02 Released 0.5.2 - * Add Hebrew Translations - * Fix crasher bug for devices with relative 3rd axis - * Improve keycode handling - -2009-10-27 Released 0.5.0 - * Port easystroke to XI2, simplifying much of the code. Note that - this version of easystroke will not work on X servers < 1.7. - -2009-08-19 Released 0.4.9 - * Fix a bug regarding application groups - * Add Polish translations - -2009-08-15 Released 0.4.8 - * Fix the use-case where only application-dependent gestures are defined - * Set default gesture trail width to 3 - * Update Russian translations - -2009-07-05 Released 0.4.7 - * Work around an X server bug causing problems with vertical gestures - * Update Russian translations - -2009-06-16 Released 0.4.6 - * Switch from -Os to -O2 to work around gcc bug - * Add Russian translations - * Build fix for karmic - -2009-06-01 Released 0.4.5 - * Fix bug that caused easystroke to crash on start up if - there were devices that couldn't be opened - * Add Chinese translations - -2009-05-12 Released 0.4.4 - * Fix bug that made it impossible to record gestures if there were no - default actions - * Make editing commands possible again - -2009-05-09 Released 0.4.3 - * Improve DND behavior - -2009-05-09 Released 0.4.2 - * XInput bugfixes - * French & Japanese translations and various translations updates - -2009-03-16 Released 0.4.1.1 - * Allow button remapping when XInput is disabled - * Various bugfixes - * Allow easystroke to only be enabled for specific applications - * Option to hide OSD - * Translation updates - -2009-02-20 Released 0.4.1 - * New stroke matching algorithm - * New timeout algorithm - * Click & Hold gestures - * Kill radius property - * Set environment variables containing start/end point - * Fix 'Command' action - * Option to show last gesture in tray - * Option to change scroll speed/direction - -2009-02-08 Released 0.4.0 - * Support for xserver-1.6 - * Additional gesture buttons - * Instant Gestures - * Add Czech, German, Italian and Spanish translations - * Add 'Text' action - * Add "Timeout-Advanced" gestures - * Add conservative timeout profile, rename conservative to default - * Disable easystroke through middle-click - * Show a different icon when disabled - * Show an 'icon hidden' warning when appropriate - * Never show clicks - * Display a warning for 'click' gestures - * Save preferences in version-specific file - * Option to not show popups on advanced gestures - * Don't abort gestures when Escape is pressed, as this was causing - lock-ups - -2008-12-22 Released 0.3.1 - * Better method for drawing strokes on a composited desktop - * Several bug-fixes - * Autostart option - -2008-11-07 Released 0.3.0 - * application-dependent gestures - * application-dependent gesture button - * Timeout gestures - * disable easystroke for specific devices - * easystroke send "foo" to excecute action foo from the command line - * disable easystroke using the tray menu or by a gesture - * 3 new actions: - + "Unminimize" undoes the last minimize actinos - + "Show/Hide" brings up or hides the configuration dialog - + "Disable (Enable)" disables (or enables if invoked from the - command line) the program. - * action list now reorderable - * hot-plugging support - * option to activate gestures with any modifier combination held down - * option to hide tray icon - * higher quality gesture previews - * Feedback in the tray icon whether the gesture succeeded or not - * Ring the bell on failed gestures - * Blue popup to notify user of scroll and ignore mode - * added support for compiz water plugin - * option to change the stroke color - * dropped support for some advanced features when xinput is unavailable - * -c option to start easystroke with config window open - * dropped -n (no gui) option - -2008-09-18 Released 0.2.2.1 - * bug fix release, resolvs a few minor issues - -2008-08-17 Released 0.2.2 - * improved visual feedback - * configurable gesture timeout - * better pointer tracking - * many minor improvements - -2008-08-06 Released 0.2.1.1. - * add license information to the source files - -2008-08-03 Released 0.2.1, correcting some silly Makefile mistakes. - -2008-08-03 Released 0.2.0. - * many tablet-related improvements - * advanced gestures - -2008-06-22 Released 0.1.2. - * Fixes a few minor UI glitches. - -2008-06-19 Released 0.1.1. - * "click during stroke" - This feature allows you to emulate a mouse click by clicking a second - button during a stroke (which can essentially turn a one-button tablet pen - into three-button mouse). - -2008-06-14 Released 0.1 - * First public release. diff --git a/docs/index.md b/docs/index.md index 118e0c9c..06c9049d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,6 +1,6 @@ Note: The documentation is outdated. Help in keeping this up to date is always appreciated. The changelog entries at the end of this page serve as a reminder what still needs to be documented. -Easystroke is a gesture-recognition program, which can execute predefined actions based on "gestures" that you draw on the screen. To see what this is all about, start easystroke and begin drawing a few gestures by holding down the middle mouse button and moving your mouse/pen around. (Peek ahead a little bit if the middle button is inconvenient for you.) Right now, nothing happens yet when you draw a gesture, so let's define some actions next. +Easy Gesture is a gesture-recognition program, which can execute predefined actions based on "gestures" that you draw on the screen. To see what this is all about, start Easy Gesture and begin drawing a few gestures by holding down the middle mouse button and moving your mouse/pen around. (Peek ahead a little bit if the middle button is inconvenient for you.) Right now, nothing happens yet when you draw a gesture, so let's define some actions next. Say you want to use gestures to switch tabs in Firefox. @@ -13,10 +13,10 @@ Say you want to use gestures to switch tabs in Firefox. A _tab-right_ gesture can be defined in the same way, this time moving the mouse to the right (the key combination is _Ctrl+Page Down_, by the way). If you open a Firefox window with a bunch of open tabs, you can now switch tabs just by drawing the gestures you just defined, without having to move you mouse to the other end of the screen). -The rest of the document describes the program's options in more detail. Note that preferences are always saved instantly, so you don't need to worry about losing your newly-recorded strokes if there is a crash. You can quit easystroke by right-clicking on the tray icon and selecting _Quit_. +The rest of the document describes the program's options in more detail. Note that preferences are always saved instantly, so you don't need to worry about losing your newly-recorded strokes if there is a crash. You can quit Easy Gesture by right-clicking on the tray icon and selecting _Quit_. # Action types -[[Image(MiscWikiFiles:easystroke-actions.png)]] +[[Image(MiscWikiFiles:Easy Gesture-actions.png)]] This is the list of strokes and their associated actions. Adding and deleting lines and recording strokes is straightforward, but let's have a look at the different actions that are currently supported @@ -49,18 +49,18 @@ Emulates a button press, again possibly with modifiers. If you need to be able t * 'Show/Hide' brings up or hides the configuration dialog * 'Disable (Enable)' disables (or enables if invoked from the command line) the program. -[[Image(MiscWikiFiles:easystroke-apps.png)]] +[[Image(MiscWikiFiles:Easy Gesture-apps.png)]] # Application and Groups -By default, gestures work in any application (unless the application is disabled entirely, which can be set up on the _Preferences_ tab). This feature allows you to set up easystroke to behave differently depending on which application the cursor is in. To use the feature, simply open the _Applications_ expander on the _Actions_ tab. You can maintain a list of applications, whose behavior differs from the default by using the _Add Application_ and _Remove Application_ buttons. The special entry _Default_ refers to all other applications. To edit the list of gestures for an application simply click on the application. +By default, gestures work in any application (unless the application is disabled entirely, which can be set up on the _Preferences_ tab). This feature allows you to set up Easy Gesture to behave differently depending on which application the cursor is in. To use the feature, simply open the _Applications_ expander on the _Actions_ tab. You can maintain a list of applications, whose behavior differs from the default by using the _Add Application_ and _Remove Application_ buttons. The special entry _Default_ refers to all other applications. To edit the list of gestures for an application simply click on the application. -It is important to understand how application-dependent gestures are stored: rather than maintaining a list of actions for each application, easystroke only stores the *difference* to its parent node _Default_. This means that all default actions are available in your applications, and if you add or delete a gesture in the _Default_ actions, this change will be reflected in all applications. On the other hand, adding, changing or deleting gestures for a specific application never affects the list of default actions in any way, and you can revert to the default at any time using the _Reset Action(s)_ button. You can even bring actions back from the dead by enabling the _Show deleted rows_ check box and then resetting the deleted actions. It is easy to tell which actions have been changed compared with the default: changed entries are rendered bold; deleted actions appear grayed out. +It is important to understand how application-dependent gestures are stored: rather than maintaining a list of actions for each application, Easy Gesture only stores the *difference* to its parent node _Default_. This means that all default actions are available in your applications, and if you add or delete a gesture in the _Default_ actions, this change will be reflected in all applications. On the other hand, adding, changing or deleting gestures for a specific application never affects the list of default actions in any way, and you can revert to the default at any time using the _Reset Action(s)_ button. You can even bring actions back from the dead by enabling the _Show deleted rows_ check box and then resetting the deleted actions. It is easy to tell which actions have been changed compared with the default: changed entries are rendered bold; deleted actions appear grayed out. -The power of this approach is best illustrated by an example: The screenshot above shows some modifications that were made to the action list for the gnome-terminal application. Most applications with a tabbed interface use Ctrl+T as a shortcut for opening a tab, but gnome-terminal uses the non-standard Shift+Ctrl+T combination, so that the user can use Ctrl+T to interact with terminal applications. In easystroke, we can simply change the key combination for gnome-terminal to Shift+Ctrl+T without affecting any other applications. Similarly, gnome-terminal doesn't support to reopen a closed tab, so we can simply delete the action from the list. +The power of this approach is best illustrated by an example: The screenshot above shows some modifications that were made to the action list for the gnome-terminal application. Most applications with a tabbed interface use Ctrl+T as a shortcut for opening a tab, but gnome-terminal uses the non-standard Shift+Ctrl+T combination, so that the user can use Ctrl+T to interact with terminal applications. In Easy Gesture, we can simply change the key combination for gnome-terminal to Shift+Ctrl+T without affecting any other applications. Similarly, gnome-terminal doesn't support to reopen a closed tab, so we can simply delete the action from the list. -If you'd like several application to be have in a similar way, you may combine them to an _Application Group_. All applications belonging to the application group inherit their gestures from the group, which in turn inherits its actions from its parent. Easystroke allows arbitrary trees (with root _Default_) as its hierarchy for applications and groups. +If you'd like several application to be have in a similar way, you may combine them to an _Application Group_. All applications belonging to the application group inherit their gestures from the group, which in turn inherits its actions from its parent. Easy Gesture allows arbitrary trees (with root _Default_) as its hierarchy for applications and groups. -[[Image(MiscWikiFiles:easystroke-preferences.png)]] +[[Image(MiscWikiFiles:Easy Gesture-preferences.png)]] # Behavior @@ -68,11 +68,11 @@ If you'd like several application to be have in a similar way, you may combine t [Advanced Gestures](FeatureAdvancedGestures) have their own documentation page. -Since it is hard to perform clicks without any motion on most pointing devices and since it is also difficult to reliably recognize gestures that are too short, easystroke will only treat motions as gestures that have a certain minimum length. This length can be configured using the 'Treat it as a click if the cursor isn't moved more than this many pixels away from the original position' option. +Since it is hard to perform clicks without any motion on most pointing devices and since it is also difficult to reliably recognize gestures that are too short, Easy Gesture will only treat motions as gestures that have a certain minimum length. This length can be configured using the 'Treat it as a click if the cursor isn't moved more than this many pixels away from the original position' option. -If you enable the 'Accept gestures when menus are shown' option, easystroke will allow gesturing even when the server is grabbed (which happens when applications display menus and in a few other situations: many compiz plugins do this, too). Note that any clicks you make during a server grab will be passed to the grabbing application, which might result in unexpected behavior, especially if the gesture button is set to the left button. +If you enable the 'Accept gestures when menus are shown' option, Easy Gesture will allow gesturing even when the server is grabbed (which happens when applications display menus and in a few other situations: many compiz plugins do this, too). Note that any clicks you make during a server grab will be passed to the grabbing application, which might result in unexpected behavior, especially if the gesture button is set to the left button. -In 'Timeout profile' profile combo box, you can set up how fast gestures are timing out, or completely turn off timeouts. Note that you can get advanced timeout options if you start easystroke in experimental mode ("easystroke -e"). +In 'Timeout profile' profile combo box, you can set up how fast gestures are timing out, or completely turn off timeouts. Note that you can get advanced timeout options if you start Easy Gesture in experimental mode ("Easy Gesture -e"). # Appearance @@ -96,20 +96,20 @@ The 'Abort stroke if pressure exceeds the number on the left' option allows you # Exceptions -'Exceptions' is a list of applications where easystroke is disabled. For example, you could add 'xournal' to the list in order to be able to use the tablet button as an eraser. +'Exceptions' is a list of applications where Easy Gesture is disabled. For example, you could add 'xournal' to the list in order to be able to use the tablet button as an eraser. -[[Image(MiscWikiFiles:easystroke-advanced.png)]] +[[Image(MiscWikiFiles:Easy Gesture-advanced.png)]] -[[Image(MiscWikiFiles:easystroke-history.png)]] +[[Image(MiscWikiFiles:Easy Gesture-history.png)]] -A common problem with gesture applications is the lack of feedback and transparency: If something goes wrong it's hard to tell what action was executed and why and how you can prevent a similar thing from happening in the future. The _Statistics_ tab tries to alleviate this problem by showing a history of the last few strokes and how close easystroke judged them to be to the strokes in the actions list. This might give you a clue which strokes you might have to re-record or replace by something totally different. +A common problem with gesture applications is the lack of feedback and transparency: If something goes wrong it's hard to tell what action was executed and why and how you can prevent a similar thing from happening in the future. The _Statistics_ tab tries to alleviate this problem by showing a history of the last few strokes and how close Easy Gesture judged them to be to the strokes in the actions list. This might give you a clue which strokes you might have to re-record or replace by something totally different. Moreover, the matrix button will show you a complete table of how close the strokes in your database are to each other. It creates a file 'strokes.pdf' in the /tmp directory and then calls evince on it. # Experimental Mode -For a small project like easystroke, it makes little sense to split development up into a stable and a development tree. Nevertheless, some features may take a little more time to develop, be of questionable usefulness or too poorly documented even for my tastes. I'd also like to release early, release often. That's why I've relegated these features to an _experimental mode_, which can only be enabled on the command line by supplying the parameter '-e'. So if you're curious what this is about, be sure to check it out. Don't worry, your computer won't blow up. Comments on whether any of the experimental features are indispensable or completely useless or how they could be improved are always appreciated. +For a small project like Easy Gesture, it makes little sense to split development up into a stable and a development tree. Nevertheless, some features may take a little more time to develop, be of questionable usefulness or too poorly documented even for my tastes. I'd also like to release early, release often. That's why I've relegated these features to an _experimental mode_, which can only be enabled on the command line by supplying the parameter '-e'. So if you're curious what this is about, be sure to check it out. Don't worry, your computer won't blow up. Comments on whether any of the experimental features are indispensable or completely useless or how they could be improved are always appreciated. Finally, a short description of the current experimental features: * Minimum speed: Specifies the minimum speed that you need to move the pointer with in order for the gesture not to time out. If you don't move the for the amount of time that 'Timeout' is set to, the click is passed along to the application immediately. \ No newline at end of file diff --git a/docs/tips-and-tricks.md b/docs/tips-and-tricks.md index b09075d8..557b3211 100644 --- a/docs/tips-and-tricks.md +++ b/docs/tips-and-tricks.md @@ -3,7 +3,7 @@ Configure Tap Zones and use them as buttons and separate scroll wheels. I've det Configure Tap Zones- http://ubuntuforums.org/showthread.php?t=1824870 Set up tap zones to perform buttons and scroll wheels- http://ubuntuforums.org/showthread.php?t=1859936 -*Using Easystroke to perform like Scrybe Gesture Workflows — Searching and Shopping* +*Using Easy Gesture to perform like Scrybe Gesture Workflows — Searching and Shopping* First install xsel @@ -44,11 +44,11 @@ any other search engines can be done using this. ## Mapping mouse buttons to keyboard shortcuts -If you have a mouse button that you don't need, you can use easystroke to remap it to any command or keyboard shortcut. Just add the button as an additional button (or use the gesture button if you don't want to use gestures). Since you don't want to use the button for gestures, select "Instant Gestures" on the bottom of the button dialog. To assign an action to the button, just press the button when recording a new gesture. To assign a modifier to the mouse button, you can use the "Ignore" action type. +If you have a mouse button that you don't need, you can use Easy Gesture to remap it to any command or keyboard shortcut. Just add the button as an additional button (or use the gesture button if you don't want to use gestures). Since you don't want to use the button for gestures, select "Instant Gestures" on the bottom of the button dialog. To assign an action to the button, just press the button when recording a new gesture. To assign a modifier to the mouse button, you can use the "Ignore" action type. ## Emulating a scroll wheel using a button -If you don't have a scroll wheel, you can make easystroke emulate one by pressing a button and moving the cursor. Add the button as an additional button of type "instant gestures" as above, and record a new gesture by clicking the button, then change the action's type to "Scroll". +If you don't have a scroll wheel, you can make Easy Gesture emulate one by pressing a button and moving the cursor. Add the button as an additional button of type "instant gestures" as above, and record a new gesture by clicking the button, then change the action's type to "Scroll". ## xte _xte_ is a handy little command-line tool that can emulate key presses and mouse clicks. In Debian/Ubuntu, it can be found in the xautomation package. @@ -91,7 +91,7 @@ But Xrandr is perfectly capable of notifying applications of screen changes, so # Useful Tablet PC apps -These applications have nothing to do with easystroke per se, but I've found them highly valuable, so I'd like to spread the word. +These applications have nothing to do with Easy Gesture per se, but I've found them highly valuable, so I'd like to spread the word. * [xournal](http://xournal.sourceforge.net/) is a great note-taking application. It supports PDF annotation and can take advantage of the full digitizer resolution. * [cellwriter](http://risujin.org/cellwriter) is a handwriting input panel/onscreen keyboard with a very pleasant and intuitive user interface. * [Grab and Drag](http://grabanddrag.mozdev.org/) is a firefox add-on that makes scrolling with a pen a breeze. It also works for thunderbird, by the way. diff --git a/docs/translations.md b/docs/translations.md index 1dbeea21..1c4b7926 100644 --- a/docs/translations.md +++ b/docs/translations.md @@ -1,4 +1,4 @@ -There are two ways to contribute translations to easystroke: +There are two ways to contribute translations to Easy Gesture: # Launchpad @@ -8,11 +8,11 @@ https://translations.launchpad.net/easystroke/trunk/+pots/easystroke Before each release, I will pull in the latest translations from launchpad. -To test your translations (assuming you're running a recent enough version of easystroke), download the .mo file from launchpad and copy it to /usr/share/locale/??/LC_MESSAGES/easystroke.mo, where ?? represents the language code. +To test your translations (assuming you're running a recent enough version of Easy Gesture), download the .mo file from launchpad and copy it to /usr/share/locale/??/LC_MESSAGES/easystroke.mo, where ?? represents the language code. # Manual -The downside to the launchpad approach is that you don't immediately see the effects of your translations. You can also directly edit translations in the source: First clone the easystroke repository (as explained in BuildInstructions). If there already is a translation file for your language (po/??.po), you can either edit the file by hand or use an po file editor such as gtranslator. Otherwise you need to base the file off the messages.pot file that can be built by typing 'make translate' (or just ask me to create a .po file for your language). To test your translations, you need to compile the po file ('make compile-translations') and then execute easystroke from the root directory of the repository. +The downside to the launchpad approach is that you don't immediately see the effects of your translations. You can also directly edit translations in the source: First clone the Easy Gesture repository (as explained in BuildInstructions). If there already is a translation file for your language (po/??.po), you can either edit the file by hand or use an po file editor such as gtranslator. Otherwise you need to base the file off the messages.pot file that can be built by typing 'make translate' (or just ask me to create a .po file for your language). To test your translations, you need to compile the po file ('make compile-translations') and then execute Easy Gesture from the root directory of the repository. If you go this route, please check whether launchpad has updated translations first. If that's the case, either download the .po file directly from launchpad and place it in the po directory or ask me to import it into git. diff --git a/service/.gitignore b/service/.gitignore index 30aa8b7f..6184b0a8 100644 --- a/service/.gitignore +++ b/service/.gitignore @@ -1,6 +1,7 @@ *.o *.Po easystroke +easy-gesture easystroke.1 gui.c desktop.c diff --git a/service/Makefile b/service/Makefile index 71beaa42..f9992032 100644 --- a/service/Makefile +++ b/service/Makefile @@ -30,7 +30,7 @@ LDFLAGS = $(DFLAGS) LIBS = $(DFLAGS) -lboost_serialization -lX11 -lXext -lXi -lXfixes -lXtst `pkg-config gtkmm-3.0 dbus-glib-1 --libs` -BINARY = easystroke +BINARY = easy-gesture ICON = easystroke.svg MENU = easystroke.desktop MANPAGE = easystroke.1 diff --git a/service/grabber.cc b/service/grabber.cc index 3e8512f0..9ae17170 100644 --- a/service/grabber.cc +++ b/service/grabber.cc @@ -250,8 +250,8 @@ bool Grabber::init_xi() { if (!XQueryExtension(dpy, "XInputExtension", &opcode, &event, &error) || XIQueryVersion(dpy, &major, &minor) == BadRequest || major < 2) { - printf("Error: This version of easystroke needs an XInput 2.0-aware X server.\n" - "Please downgrade to easystroke 0.4.x or upgrade your X server to 1.7.\n"); + printf("Error: This version of Easy Gesture needs an XInput 2.0-aware X server.\n" + "Please upgrade your X server to 1.7.\n"); exit(EXIT_FAILURE); } From 272c1b2cf9cf5967a07ec40c4bbf585f4fe70779 Mon Sep 17 00:00:00 2001 From: "berkeleybross@gmail.com" Date: Sun, 27 Dec 2020 14:13:20 +0000 Subject: [PATCH 08/69] Started adding python GTK --- docs/build-instructions.md | 12 +++++++++++- gui/Makefile | 7 +++++++ gui/main.py | 20 ++++++++++++++++++++ service/Makefile | 4 ++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 gui/Makefile create mode 100644 gui/main.py diff --git a/docs/build-instructions.md b/docs/build-instructions.md index 5aa9f2e3..c78fc1ff 100644 --- a/docs/build-instructions.md +++ b/docs/build-instructions.md @@ -1,8 +1,18 @@ -Easy Gesture is written in C++ and uses gtkmm for its GUI, but it also depends on the availability of several X11 extensions (Xtst, Xrandr and Xinput) and on the boost::serialization library. Installation of the libraries is distribution-specific. Please feel free to add instructions for your distro of choice. +# Overview + +Easy Gesture is split into two parts - the GUI and the service. + +The service runs in the background, watching for gestures and running commands. It's configured through ~/.easy-gesture/config.toml and ~/.easy-gesture/gestures.yaml. +The GUI provides an easy way to change config.toml or gestures.yaml (but it's not necessary to use the GUI). # Debian/Ubuntu sudo apt-get install g++ libboost-serialization-dev libgtkmm-3.0-dev libxtst-dev libdbus-glib-1-dev intltool xserver-xorg-dev + sudo apt-get install -y python3-venv python3-wheel python3-dev + sudo apt-get install -y libgirepository1.0-dev build-essential + sudo apt-get install -y libbz2-dev libreadline-dev libssl-dev zlib1g-dev libsqlite3-dev wget + sudo apt-get install -y curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libcairo2-dev + pip3 install pycairo PyGObject # Releases diff --git a/gui/Makefile b/gui/Makefile new file mode 100644 index 00000000..c1e9e403 --- /dev/null +++ b/gui/Makefile @@ -0,0 +1,7 @@ +all: + +clean: + @echo "clean" + +run: + python3 main.py diff --git a/gui/main.py b/gui/main.py new file mode 100644 index 00000000..9f8bbca5 --- /dev/null +++ b/gui/main.py @@ -0,0 +1,20 @@ +import gi + +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk + +class MyWindow(Gtk.Window): + def __init__(self): + Gtk.Window.__init__(self, title="Hello World") + + self.button = Gtk.Button(label="Click Here") + self.button.connect("clicked", self.on_button_clicked) + self.add(self.button) + + def on_button_clicked(self, widget): + print("Hello World") + +win = MyWindow() +win.connect("destroy", Gtk.main_quit) +win.show_all() +Gtk.main() \ No newline at end of file diff --git a/service/Makefile b/service/Makefile index f9992032..f09af46b 100644 --- a/service/Makefile +++ b/service/Makefile @@ -154,3 +154,7 @@ complete: .clang_complete .clang_complete: Makefile @echo $(CXXSTD) > $@ @$(foreach inc,$(INCLUDES),echo $(inc) >> $@;) + +run: + make -j2 + ./easy-gesture From 5c1f17cfeacd3124e554c8b85644c40c6693a75c Mon Sep 17 00:00:00 2001 From: "berkeleybross@gmail.com" Date: Sun, 27 Dec 2020 23:06:20 +0000 Subject: [PATCH 09/69] Added clion files --- service/.idea/.gitignore | 8 ++++++++ service/.idea/misc.xml | 18 ++++++++++++++++++ service/.idea/vcs.xml | 6 ++++++ 3 files changed, 32 insertions(+) create mode 100644 service/.idea/.gitignore create mode 100644 service/.idea/misc.xml create mode 100644 service/.idea/vcs.xml diff --git a/service/.idea/.gitignore b/service/.idea/.gitignore new file mode 100644 index 00000000..73f69e09 --- /dev/null +++ b/service/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/service/.idea/misc.xml b/service/.idea/misc.xml new file mode 100644 index 00000000..53624c9e --- /dev/null +++ b/service/.idea/misc.xml @@ -0,0 +1,18 @@ + + + + + + + + \ No newline at end of file diff --git a/service/.idea/vcs.xml b/service/.idea/vcs.xml new file mode 100644 index 00000000..6c0b8635 --- /dev/null +++ b/service/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From 2bc8f5c1f2cb82d2103285755e6395793797c2d7 Mon Sep 17 00:00:00 2001 From: "berkeleybross@gmail.com" Date: Sun, 27 Dec 2020 23:34:54 +0000 Subject: [PATCH 10/69] Removed superflous options --- service/annotate.cc | 51 ---------------------------- service/annotate.h | 34 ------------------- service/fire.cc | 58 -------------------------------- service/fire.h | 38 --------------------- service/gui.glade | 2 +- service/main.cc | 38 ++------------------- service/po/ca.po | 9 ----- service/po/cs.po | 9 ----- service/po/el.po | 9 ----- service/po/es.po | 9 ----- service/po/fi.po | 9 ----- service/po/fr.po | 9 ----- service/po/he.po | 9 ----- service/po/hu.po | 9 ----- service/po/it.po | 9 ----- service/po/ja.po | 9 ----- service/po/ko.po | 9 ----- service/po/pl.po | 9 ----- service/po/ru.po | 9 ----- service/po/vi.po | 9 ----- service/po/zh_CN.po | 9 ----- service/po/zh_TW.po | 9 ----- service/prefdb.cc | 4 --- service/prefdb.h | 5 ++- service/prefs.cc | 14 -------- service/shape.cc | 81 --------------------------------------------- service/shape.h | 35 -------------------- service/trace.h | 7 ---- service/water.cc | 41 ----------------------- service/water.h | 33 ------------------ 30 files changed, 5 insertions(+), 580 deletions(-) delete mode 100644 service/annotate.cc delete mode 100644 service/annotate.h delete mode 100644 service/fire.cc delete mode 100644 service/fire.h delete mode 100644 service/shape.cc delete mode 100644 service/shape.h delete mode 100644 service/water.cc delete mode 100644 service/water.h diff --git a/service/annotate.cc b/service/annotate.cc deleted file mode 100644 index a6f04817..00000000 --- a/service/annotate.cc +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2008-2009, Thomas Jaeger - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#include "annotate.h" -#include -#include - -Annotate::Annotate() { - const char *ofc = "org.freedesktop.compiz"; - GError *error = 0; - bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error); - if (!bus) { - g_error_free(error); - throw DBusException(); - } - - char draw[256]; - char clear[256]; - snprintf(draw, sizeof(draw), "/org/freedesktop/compiz/annotate/screen%d/draw", DefaultScreen(dpy)); - snprintf(clear, sizeof(clear), "/org/freedesktop/compiz/annotate/screen%d/clear_key", DefaultScreen(dpy)); - - draw_proxy = dbus_g_proxy_new_for_name(bus, ofc, draw, ofc); - clear_proxy = dbus_g_proxy_new_for_name(bus, ofc, clear, ofc); -} - -void Annotate::draw(Point p, Point q) { - dbus_g_proxy_call_no_reply(draw_proxy, "activate", - G_TYPE_STRING, "root", G_TYPE_INT, gint(ROOT), - G_TYPE_STRING, "x1", G_TYPE_DOUBLE, gdouble(p.x), - G_TYPE_STRING, "y1", G_TYPE_DOUBLE, gdouble(p.y), - G_TYPE_STRING, "x2", G_TYPE_DOUBLE, gdouble(q.x), - G_TYPE_STRING, "y2", G_TYPE_DOUBLE, gdouble(q.y), - G_TYPE_INVALID); -} -void Annotate::end_() { - dbus_g_proxy_call_no_reply(clear_proxy, "activate", - G_TYPE_STRING, "root", G_TYPE_INT, gint(ROOT), - G_TYPE_INVALID); -} diff --git a/service/annotate.h b/service/annotate.h deleted file mode 100644 index ed8c7b79..00000000 --- a/service/annotate.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2008, Thomas Jaeger - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#ifndef __ANNOTATE_H__ -#define __ANNOTATE_H__ -#include "trace.h" -#include "main.h" -#include - -class Annotate : public Trace { - DBusGConnection *bus; - DBusGProxy *draw_proxy; - DBusGProxy *clear_proxy; - - virtual void draw(Point p, Point q); - virtual void start_() {} - virtual void end_(); -public: - Annotate(); -}; - -#endif diff --git a/service/fire.cc b/service/fire.cc deleted file mode 100644 index 512d462a..00000000 --- a/service/fire.cc +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2008-2009, Thomas Jaeger - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#include "fire.h" -#include -#include -#include - -Fire::Fire() { - const char *ofc = "org.freedesktop.compiz"; - GError *error = 0; - bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error); - if (!bus) { - g_error_free(error); - throw DBusException(); - } - char add[256]; - char clear[256]; - snprintf(add, sizeof(add), "/org/freedesktop/compiz/firepaint/screen%d/add_particle", DefaultScreen(dpy)); - snprintf(clear, sizeof(clear), "/org/freedesktop/compiz/firepaint/screen%d/clear_key", DefaultScreen(dpy)); - - point_proxy = dbus_g_proxy_new_for_name(bus, ofc, add, ofc); - clear_proxy = dbus_g_proxy_new_for_name(bus, ofc, clear, ofc); -} - -void Fire::add_point(float x, float y) { - dbus_g_proxy_call_no_reply(point_proxy, "activate", - G_TYPE_STRING, "root", G_TYPE_INT, gint(ROOT), - G_TYPE_STRING, "x", G_TYPE_DOUBLE, gdouble(x), - G_TYPE_STRING, "y", G_TYPE_DOUBLE, gdouble(y), - G_TYPE_INVALID); -} - -void Fire::draw(Point p, Point q) { - float dist = hypot(p.x-q.x, p.y-q.y); - leftover -= dist; - while (leftover < 0.01) { - add_point(q.x + (q.x-p.x)*leftover/dist, q.y + (q.y-p.y)*leftover/dist); - leftover += 5.0; - } -} -void Fire::timeout() { - dbus_g_proxy_call_no_reply(clear_proxy, "activate", - G_TYPE_STRING, "root", G_TYPE_INT, gint(ROOT), - G_TYPE_INVALID); -} diff --git a/service/fire.h b/service/fire.h deleted file mode 100644 index 66a5164d..00000000 --- a/service/fire.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2008, Thomas Jaeger - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#ifndef __FIRE_H__ -#define __FIRE_H__ -#include "util.h" -#include "trace.h" -#include "main.h" -#include - -class Fire : public Trace, public Timeout { - DBusGConnection *bus; - DBusGProxy *point_proxy; - DBusGProxy *clear_proxy; - float leftover; - - virtual void draw(Point p, Point q); - void add_point(float, float); - virtual void start_() { if (remove_timeout()) timeout(); leftover = 0; } - virtual void end_() { set_timeout(250); } - virtual void timeout(); -public: - Fire(); -}; - -#endif diff --git a/service/gui.glade b/service/gui.glade index ac1c552c..ede4f759 100644 --- a/service/gui.glade +++ b/service/gui.glade @@ -1177,7 +1177,7 @@ Van Diep Duong (Vietnamese) True False - Method to show gestures + Method tdsfo show gestures True diff --git a/service/main.cc b/service/main.cc index af46e07d..e183a6e2 100644 --- a/service/main.cc +++ b/service/main.cc @@ -15,14 +15,10 @@ */ #include "win.h" #include "main.h" -#include "shape.h" #include "prefs.h" #include "actiondb.h" #include "prefdb.h" #include "trace.h" -#include "annotate.h" -#include "fire.h" -#include "water.h" #include "composite.h" #include "grabber.h" #include "handler.h" @@ -54,37 +50,8 @@ boost::shared_ptr trace; static ActionDBWatcher *action_watcher = 0; -static Trace *trace_composite() { - try { - return new Composite(); - } catch (std::exception &e) { - if (verbosity >= 1) - printf("Falling back to Shape method: %s\n", e.what()); - return new Shape(); - } -} - static Trace *init_trace() { - try { - switch(prefs.trace.get()) { - case TraceNone: - return new Trivial(); - case TraceShape: - return new Shape(); - case TraceAnnotate: - return new Annotate(); - case TraceFire: - return new Fire(); - case TraceWater: - return new Water(); - default: - return trace_composite(); - } - } catch (DBusException &e) { - printf(_("Error: %s\n"), e.what()); - return trace_composite(); - } - + return new Composite(); } class OSD : public Gtk::Window { @@ -95,7 +62,7 @@ class OSD : public Gtk::Window { osd_stack.push_back(this); set_accept_focus(false); set_border_width(15); - WIDGET(Gtk::Label, label, "" + txt + ""); + WIDGET(Gtk::Label, label, "lolol" + txt + ""); label.set_use_markup(); label.override_color(Gdk::RGBA("White"), Gtk::STATE_FLAG_NORMAL); override_background_color(Gdk::RGBA("RoyalBlue3"), Gtk::STATE_FLAG_NORMAL); @@ -403,7 +370,6 @@ void App::on_activate() { g_signal_connect(screen->gobj(), "composited-changed", &schedule_reload_trace, nullptr); screen->signal_size_changed().connect(sigc::ptr_fun(&schedule_reload_trace)); Notifier *trace_notify = new Notifier(sigc::ptr_fun(&schedule_reload_trace)); - prefs.trace.connect(trace_notify); prefs.color.connect(trace_notify); XTestGrabControl(dpy, True); diff --git a/service/po/ca.po b/service/po/ca.po index 1f09b854..de9a4391 100644 --- a/service/po/ca.po +++ b/service/po/ca.po @@ -230,15 +230,6 @@ msgstr "Error: No s'han pogut llegir les preferències.\n" msgid "XShape" msgstr "" -msgid "Annotate (compiz)" -msgstr "" - -msgid "Fire (compiz)" -msgstr "Foc (compiz)" - -msgid "Water (compiz)" -msgstr "Aigua (compiz)" - msgid "Timeout Off" msgstr "Temps d'espera desactivat" diff --git a/service/po/cs.po b/service/po/cs.po index f1ff28fd..e3faac04 100644 --- a/service/po/cs.po +++ b/service/po/cs.po @@ -232,15 +232,6 @@ msgstr "Chyba: Nelze načíst nastavení.\n" msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "Annotate (compiz)" - -msgid "Fire (compiz)" -msgstr "Oheň (compiz)" - -msgid "Water (compiz)" -msgstr "Voda (compiz)" - msgid "Timeout Off" msgstr "Timeout vypnutý" diff --git a/service/po/el.po b/service/po/el.po index 65f67467..cb2848ef 100644 --- a/service/po/el.po +++ b/service/po/el.po @@ -232,15 +232,6 @@ msgstr "Σφάλμα: Δεν διαβάστηκαν οι προτιμήσεις. msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "Σχολιασμός (compiz)" - -msgid "Fire (compiz)" -msgstr "Φλόγα (compiz)" - -msgid "Water (compiz)" -msgstr "Νερό (compiz)" - msgid "Timeout Off" msgstr "Απενεργοποίηση Timeout" diff --git a/service/po/es.po b/service/po/es.po index 693da9cc..0e2520d9 100644 --- a/service/po/es.po +++ b/service/po/es.po @@ -229,15 +229,6 @@ msgstr "Error: No se pudieron leer las preferencias.\n" msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "Anotar (compiz)" - -msgid "Fire (compiz)" -msgstr "Fuego (compiz)" - -msgid "Water (compiz)" -msgstr "Agua (compiz)" - msgid "Timeout Off" msgstr "Tiempo de apagado" diff --git a/service/po/fi.po b/service/po/fi.po index dbc3ef5f..e272f2e9 100644 --- a/service/po/fi.po +++ b/service/po/fi.po @@ -229,15 +229,6 @@ msgstr "Virhe: Ei voitu lukea asetuksia.\n" msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "Piirros (compiz)" - -msgid "Fire (compiz)" -msgstr "Tuli (compiz)" - -msgid "Water (compiz)" -msgstr "Vesitehoste (compiz)" - msgid "Timeout Off" msgstr "Ei aikakatkaisua" diff --git a/service/po/fr.po b/service/po/fr.po index ad856369..05d175ca 100644 --- a/service/po/fr.po +++ b/service/po/fr.po @@ -232,15 +232,6 @@ msgstr "Erreur : impossible de lire les préférences.\n" msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "Annoter (compiz)" - -msgid "Fire (compiz)" -msgstr "Feu (compiz)" - -msgid "Water (compiz)" -msgstr "Gouttes d'eau (compiz)" - msgid "Timeout Off" msgstr "Arrêt du temps mort" diff --git a/service/po/he.po b/service/po/he.po index 10abefe8..a8398a16 100644 --- a/service/po/he.po +++ b/service/po/he.po @@ -225,15 +225,6 @@ msgstr "שגיאה: לא ניתן לקרוא את ההעדפות.\n" msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "ציור הערות (compiz)" - -msgid "Fire (compiz)" -msgstr "אש (compiz)" - -msgid "Water (compiz)" -msgstr "מים (compiz)" - msgid "Timeout Off" msgstr "פסק זמן כבוי" diff --git a/service/po/hu.po b/service/po/hu.po index ac64d288..b9cf0b71 100644 --- a/service/po/hu.po +++ b/service/po/hu.po @@ -231,15 +231,6 @@ msgstr "Hiba: Nem sikerült olvasni a beállításokat.\n" msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "Feljegyzés (compiz)" - -msgid "Fire (compiz)" -msgstr "Tűz (compiz)" - -msgid "Water (compiz)" -msgstr "Víz (compiz)" - msgid "Timeout Off" msgstr "Késleltetés kikapcsolva" diff --git a/service/po/it.po b/service/po/it.po index 44d69628..634d8b50 100644 --- a/service/po/it.po +++ b/service/po/it.po @@ -230,15 +230,6 @@ msgstr "Errore: impossibile leggere le preferenze.\n" msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "Annotazione (compiz)" - -msgid "Fire (compiz)" -msgstr "Fuoco (compiz)" - -msgid "Water (compiz)" -msgstr "Acqua (compiz)" - msgid "Timeout Off" msgstr "Fine timeout" diff --git a/service/po/ja.po b/service/po/ja.po index b7173537..38083a83 100644 --- a/service/po/ja.po +++ b/service/po/ja.po @@ -222,15 +222,6 @@ msgstr "エラー: 設定を読めませんでした。\n" msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "注釈線 (compiz)" - -msgid "Fire (compiz)" -msgstr "炎の描画 (compiz)" - -msgid "Water (compiz)" -msgstr "水効果 (compiz)" - msgid "Timeout Off" msgstr "タイムアウトなし" diff --git a/service/po/ko.po b/service/po/ko.po index 1f1b0b23..fd06a693 100644 --- a/service/po/ko.po +++ b/service/po/ko.po @@ -220,15 +220,6 @@ msgstr "오류: 환경설정을 읽을 수 없습니다.\n" msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "주석 (컴피즈)" - -msgid "Fire (compiz)" -msgstr "화면에 불꽃으로 그림을 그림 (컴피즈)" - -msgid "Water (compiz)" -msgstr "물결 효과 (컴피즈)" - msgid "Timeout Off" msgstr "시간제한 끔" diff --git a/service/po/pl.po b/service/po/pl.po index ef4d34af..164a6b4d 100644 --- a/service/po/pl.po +++ b/service/po/pl.po @@ -233,15 +233,6 @@ msgstr "Błąd: Nie potrafię odczytać ustawień.\n" msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "Rysowanie (compiz)" - -msgid "Fire (compiz)" -msgstr "Ogień (compiz)" - -msgid "Water (compiz)" -msgstr "Woda (compiz)" - msgid "Timeout Off" msgstr "Przeyrwanie wyłączone" diff --git a/service/po/ru.po b/service/po/ru.po index 11bb8e0a..ded89a57 100644 --- a/service/po/ru.po +++ b/service/po/ru.po @@ -234,15 +234,6 @@ msgstr "Ошибка: не смог прочитать параметры нас msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "Annotate (Сompiz)" - -msgid "Fire (compiz)" -msgstr "Огонь (Сompiz)" - -msgid "Water (compiz)" -msgstr "Вода (Сompiz)" - msgid "Timeout Off" msgstr "Тайм-аут вытключен" diff --git a/service/po/vi.po b/service/po/vi.po index 78093f40..1cc2809d 100644 --- a/service/po/vi.po +++ b/service/po/vi.po @@ -227,15 +227,6 @@ msgstr "Lỗi: Không thể đọc các tùy chọn\n" msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "Annotate (compiz)" - -msgid "Fire (compiz)" -msgstr "Fire (compiz)" - -msgid "Water (compiz)" -msgstr "Water (compiz)" - msgid "Timeout Off" msgstr "Tắt" diff --git a/service/po/zh_CN.po b/service/po/zh_CN.po index 9dfca926..e0c31f8a 100644 --- a/service/po/zh_CN.po +++ b/service/po/zh_CN.po @@ -219,15 +219,6 @@ msgstr "错误:读取参数失败\n" msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "Annotate (compiz)" - -msgid "Fire (compiz)" -msgstr "Fire (compiz)" - -msgid "Water (compiz)" -msgstr "Water (compiz)" - msgid "Timeout Off" msgstr "超时关闭" diff --git a/service/po/zh_TW.po b/service/po/zh_TW.po index 9ef54d90..7733290f 100644 --- a/service/po/zh_TW.po +++ b/service/po/zh_TW.po @@ -218,15 +218,6 @@ msgstr "錯誤:無法讀取偏好設定\n" msgid "XShape" msgstr "XShape" -msgid "Annotate (compiz)" -msgstr "Annotate (compiz)" - -msgid "Fire (compiz)" -msgstr "Fire (compiz)" - -msgid "Water (compiz)" -msgstr "Water (compiz)" - msgid "Timeout Off" msgstr "關閉" diff --git a/service/prefdb.cc b/service/prefdb.cc index 0c924f57..d3f3e7cb 100644 --- a/service/prefdb.cc +++ b/service/prefdb.cc @@ -34,7 +34,6 @@ PrefDB::PrefDB() : TimeoutWatcher(5000), good_state(true), button(default_button), - trace(TraceDefault), advanced_ignore(false), proximity(false), feedback(true), @@ -71,9 +70,6 @@ template void PrefDB::serialize(Archive & ar, const unsigned int bool help; ar & help; } - ar & trace.unsafe_ref(); - if (trace.get() == TraceShape) - trace.unsafe_ref() = TraceDefault; if (version < 3) { int delay; ar & delay; diff --git a/service/prefdb.h b/service/prefdb.h index 4a325f87..d854bdfc 100644 --- a/service/prefdb.h +++ b/service/prefdb.h @@ -1,4 +1,5 @@ -/* +/* PrefSource trace; + * Copyright (c) 2008-2009, Thomas Jaeger * * Permission to use, copy, modify, and/or distribute this software for any @@ -25,7 +26,6 @@ #include "var.h" -enum TraceType { TraceDefault, TraceShape, TraceNone, TraceAnnotate, TraceFire, TraceWater }; enum TimeoutType { TimeoutOff, TimeoutDefault, TimeoutMedium, TimeoutAggressive, TimeoutFlick, TimeoutCustom, TimeoutConservative }; class ButtonInfo { @@ -111,7 +111,6 @@ class PrefDB : public TimeoutWatcher { PrefSource > exceptions; PrefSource button; - PrefSource trace; PrefSource advanced_ignore; PrefSource proximity; PrefSource feedback; diff --git a/service/prefs.cc b/service/prefs.cc index 41caf749..5f5bbb31 100644 --- a/service/prefs.cc +++ b/service/prefs.cc @@ -152,17 +152,6 @@ class Sensitive : private Base { }; static bool is_custom(TimeoutType profile) { return profile == TimeoutCustom; } -static bool draw_trace(TraceType t) { return t == TraceDefault || t == TraceShape; } - -const Combo::Info trace_info[] = { - { TraceNone, N_("None") }, - { TraceDefault, N_("Default") }, - { TraceShape, N_("XShape") }, - { TraceAnnotate, N_("Annotate (compiz)") }, - { TraceFire, N_("Fire (compiz)") }, - { TraceWater, N_("Water (compiz)") }, - { TraceDefault, 0 } -}; const Combo::Info timeout_info[] = { { TimeoutOff, N_("Timeout Off") }, @@ -260,7 +249,6 @@ Prefs::Prefs() { new Adjustment(prefs.init_timeout, "adjustment_init_timeout"); new Adjustment(prefs.final_timeout, "adjustment_final_timeout"); - new Combo(prefs.trace, "box_trace", trace_info); new Color(prefs.color, "button_color"); new Adjustment(prefs.trace_width, "adjustment_trace_width"); new Combo(prefs.timeout_profile, "box_timeout", experimental ? timeout_info_exp : timeout_info); @@ -289,8 +277,6 @@ Prefs::Prefs() { widgets->get_widget("frame_tablet", frame_tablet); new Sensitive(*fun(&is_custom, prefs.timeout_profile), "hbox_timeout"); - new Sensitive(*fun(&draw_trace, prefs.trace), "button_color"); - new Sensitive(*fun(&draw_trace, prefs.trace), "spin_trace_width"); tm = Gtk::ListStore::create(cols); tv->set_model(tm); diff --git a/service/shape.cc b/service/shape.cc deleted file mode 100644 index 15b64727..00000000 --- a/service/shape.cc +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2008-2009, Thomas Jaeger - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#include -#include "prefdb.h" -#include "shape.h" -#include "main.h" - -#include - -Shape::Shape() { - int w = gdk_screen_width(); - int h = gdk_screen_height(); - Gdk::Color col = prefs.color.get().color; - unsigned long bg = ((col.get_red()/257)<<16) + ((col.get_green()/257)<<8) + col.get_blue()/257; - win = XCreateSimpleWindow(dpy, ROOT, 0, 0, w, h, 0, CopyFromParent, bg); - XSetWindowAttributes attr; - attr.override_redirect = True; - XChangeWindowAttributes(dpy, win, CWOverrideRedirect, &attr); - - clear(); -} - -void Shape::draw(Point p, Point q) { - int px = (int)p.x, py = (int)p.y, qx = (int)q.x, qy = (int)q.y; - int width = prefs.trace_width.get(); - int x = (MIN(px, qx) - width); - int y = (MIN(py, qy) - width); - int w = (ABS(px - qx) + 2*width); - int h = (ABS(py - qy) + 2*width); - Pixmap pm = XCreatePixmap(dpy, DefaultRootWindow(dpy), w, h, 1); - - XGCValues gcv; - gcv.foreground = 0; - gcv.line_width = width; - gcv.cap_style = CapRound; - GC gc = XCreateGC(dpy, pm, GCCapStyle | GCForeground | GCLineWidth, &gcv); - XFillRectangle(dpy, pm, gc, 0, 0, w, h); - XSetForeground(dpy, gc, 1); - XDrawLine(dpy, pm, gc, px-x, py-y, qx-x, qy-y); - XFreeGC(dpy, gc); - - XShapeCombineMask(dpy, win, ShapeBounding, x, y, pm, ShapeUnion); - XFreePixmap(dpy, pm); -} - -void Shape::start_() { - if (remove_timeout()) - clear(); - XMapRaised(dpy, win); -} - -void Shape::end_() { - XUnmapWindow(dpy, win); - set_timeout(10); -} - -void Shape::timeout() { - clear(); - XFlush(dpy); -} - -void Shape::clear() { - XShapeCombineRectangles(dpy, win, ShapeBounding, 0, 0, nullptr, 0, ShapeSet, YXBanded); -} - -Shape::~Shape() { - XDestroyWindow(dpy, win); -} diff --git a/service/shape.h b/service/shape.h deleted file mode 100644 index 546a47d0..00000000 --- a/service/shape.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2008-2009, Thomas Jaeger - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#ifndef __SHAPE_H__ -#define __SHAPE_H__ -#include "util.h" -#include "trace.h" -#include "main.h" - -class Shape : public Trace, protected Timeout { - Window win; -private: - virtual void draw(Point p, Point q); - virtual void start_(); - virtual void end_(); - void clear(); -public: - Shape(); - virtual void timeout(); - virtual ~Shape(); -}; - -#endif diff --git a/service/trace.h b/service/trace.h index cc3e918d..aac678a4 100644 --- a/service/trace.h +++ b/service/trace.h @@ -42,11 +42,4 @@ class Trace { virtual ~Trace() {} }; -class Trivial : public Trace { - virtual void draw(Point p, Point q) {} - virtual void start_() {} - virtual void end_() {} -public: -}; - #endif diff --git a/service/water.cc b/service/water.cc deleted file mode 100644 index a528b01c..00000000 --- a/service/water.cc +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2008-2009, Thomas Jaeger - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#include "water.h" -#include -#include - -Water::Water() { - const char *ofc = "org.freedesktop.compiz"; - GError *error = 0; - bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error); - if (!bus) { - g_error_free(error); - throw DBusException(); - } - char line[256]; - snprintf(line, sizeof(line), "/org/freedesktop/compiz/water/screen%d/line", DefaultScreen(dpy)); - line_proxy = dbus_g_proxy_new_for_name(bus, ofc, line, ofc); -} - -void Water::draw(Point p, Point q) { - dbus_g_proxy_call_no_reply(line_proxy, "activate", - G_TYPE_STRING, "root", G_TYPE_INT, gint(ROOT), - G_TYPE_STRING, "x0", G_TYPE_INT, gint32(p.x), - G_TYPE_STRING, "y0", G_TYPE_INT, gint32(p.y), - G_TYPE_STRING, "x1", G_TYPE_INT, gint32(q.x), - G_TYPE_STRING, "y1", G_TYPE_INT, gint32(q.y), - G_TYPE_INVALID); -} diff --git a/service/water.h b/service/water.h deleted file mode 100644 index 80e5a3da..00000000 --- a/service/water.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2008, Thomas Jaeger - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#ifndef __WATER_H__ -#define __WATER_H__ -#include "trace.h" -#include "main.h" -#include - -class Water : public Trace { - DBusGConnection *bus; - DBusGProxy *line_proxy; - - virtual void draw(Point p, Point q); - virtual void start_() {} - virtual void end_() {} -public: - Water(); -}; - -#endif From ea56488e8ae45919fb7274e994c7d2e1cd958d08 Mon Sep 17 00:00:00 2001 From: "berkeleybross@gmail.com" Date: Mon, 28 Dec 2020 00:51:58 +0000 Subject: [PATCH 11/69] Removed internationalization, superfluous features --- build/run-local.sh | 5 +- service/main.cc | 964 ++++++++++++++++++++++---------------------- service/po/ca.po | 470 --------------------- service/po/cs.po | 462 --------------------- service/po/de.po | 490 ---------------------- service/po/el.po | 480 ---------------------- service/po/es.po | 475 ---------------------- service/po/fi.po | 474 ---------------------- service/po/fr.po | 479 ---------------------- service/po/he.po | 468 --------------------- service/po/hu.po | 476 ---------------------- service/po/it.po | 479 ---------------------- service/po/ja.po | 456 --------------------- service/po/ko.po | 461 --------------------- service/po/pl.po | 478 ---------------------- service/po/ru.po | 479 ---------------------- service/po/vi.po | 470 --------------------- service/po/zh_CN.po | 460 --------------------- service/po/zh_TW.po | 459 --------------------- service/prefdb.cc | 2 - service/prefdb.h | 1 - service/prefs.cc | 2 - service/stats.cc | 57 --- 23 files changed, 473 insertions(+), 8574 deletions(-) delete mode 100644 service/po/ca.po delete mode 100644 service/po/cs.po delete mode 100644 service/po/de.po delete mode 100644 service/po/el.po delete mode 100644 service/po/es.po delete mode 100644 service/po/fi.po delete mode 100644 service/po/fr.po delete mode 100644 service/po/he.po delete mode 100644 service/po/hu.po delete mode 100644 service/po/it.po delete mode 100644 service/po/ja.po delete mode 100644 service/po/ko.po delete mode 100644 service/po/pl.po delete mode 100644 service/po/ru.po delete mode 100644 service/po/vi.po delete mode 100644 service/po/zh_CN.po delete mode 100644 service/po/zh_TW.po diff --git a/build/run-local.sh b/build/run-local.sh index 9928cfc7..de44496f 100755 --- a/build/run-local.sh +++ b/build/run-local.sh @@ -3,10 +3,9 @@ set -e ( DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - cd $DIR - ./build.sh - cd $DIR/../service + make clean + make -j2 ./easy-gesture ) \ No newline at end of file diff --git a/service/main.cc b/service/main.cc index e183a6e2..feea52d8 100644 --- a/service/main.cc +++ b/service/main.cc @@ -38,8 +38,8 @@ extern Source disabled; bool experimental = false; int verbosity = 0; -const char *prefs_versions[] = { "-0.5.5", "-0.4.1", "-0.4.0", "", nullptr }; -const char *actions_versions[] = { "-0.5.6", "-0.4.1", "-0.4.0", "", nullptr }; +const char *prefs_versions[] = {"-0.5.5", "-0.4.1", "-0.4.0", "", nullptr}; +const char *actions_versions[] = {"-0.5.6", "-0.4.1", "-0.4.0", "", nullptr}; Source current_app_window(None); std::string config_dir; Win *win = nullptr; @@ -54,607 +54,585 @@ static Trace *init_trace() { return new Composite(); } -class OSD : public Gtk::Window { - static std::list osd_stack; - int w; -public: - OSD(Glib::ustring txt) : Gtk::Window(Gtk::WINDOW_POPUP) { - osd_stack.push_back(this); - set_accept_focus(false); - set_border_width(15); - WIDGET(Gtk::Label, label, "lolol" + txt + ""); - label.set_use_markup(); - label.override_color(Gdk::RGBA("White"), Gtk::STATE_FLAG_NORMAL); - override_background_color(Gdk::RGBA("RoyalBlue3"), Gtk::STATE_FLAG_NORMAL); - set_opacity(0.75); - add(label); - label.show(); - int h; - get_size(w,h); - do_move(); - show(); - get_window()->input_shape_combine_region(Cairo::Region::create(), 0, 0); - } - static void do_move() { - int left = gdk_screen_width() - 10; - for (std::list::iterator i = osd_stack.begin(); i != osd_stack.end(); i++) { - left -= (*i)->w + 30; - (*i)->move(left, 40); - } - } - virtual ~OSD() { - osd_stack.remove(this); - do_move(); - } -}; - -std::list OSD::osd_stack; - void Trace::start(Trace::Point p) { - last = p; - active = true; - XFixesHideCursor(dpy, ROOT); - start_(); + last = p; + active = true; + XFixesHideCursor(dpy, ROOT); + start_(); } void Trace::end() { - if (!active) - return; - active = false; - XFixesShowCursor(dpy, ROOT); - end_(); + if (!active) + return; + active = false; + XFixesShowCursor(dpy, ROOT); + end_(); } void icon_warning() { - for (ActionDB::const_iterator i = actions.begin(); i != actions.end(); i++) { - Misc *m = dynamic_cast(i->second.action.get()); - if (m && m->type == Misc::SHOWHIDE) - return; - } - if (!win) - return; - - Gtk::MessageDialog *md; - widgets->get_widget("dialog_icon", md); - md->set_message(_("Tray icon disabled")); - md->set_secondary_text(_("To bring the configuration dialog up again, you should define an action of type Misc...Show/Hide.")); - md->run(); - md->hide(); + for (ActionDB::const_iterator i = actions.begin(); i != actions.end(); i++) { + Misc *m = dynamic_cast(i->second.action.get()); + if (m && m->type == Misc::SHOWHIDE) + return; + } + if (!win) + return; + + Gtk::MessageDialog *md; + widgets->get_widget("dialog_icon", md); + md->set_message(_("Tray icon disabled")); + md->set_secondary_text( + _("To bring the configuration dialog up again, you should define an action of type Misc...Show/Hide.")); + md->run(); + md->hide(); } void quit() { - static bool dead = false; - if (dead) - xstate->bail_out(); - dead = true; - win->hide(); - Glib::RefPtr app = Gio::Application::get_default(); - xstate->queue(sigc::mem_fun(*app.operator->(), &Gio::Application::quit)); + static bool dead = false; + if (dead) + xstate->bail_out(); + dead = true; + win->hide(); + Glib::RefPtr app = Gio::Application::get_default(); + xstate->queue(sigc::mem_fun(*app.operator->(), &Gio::Application::quit)); } void sig_int(int) { - quit(); + quit(); } class App : public Gtk::Application, Base { public: - App(int& argc, char**& argv, const Glib::ustring& application_id, Gio::ApplicationFlags flags=Gio::APPLICATION_FLAGS_NONE) : - Gtk::Application(argc, argv, application_id, flags), remote(false), enabled(nullptr) {} - ~App(); + App(int &argc, char **&argv, const Glib::ustring &application_id, + Gio::ApplicationFlags flags = Gio::APPLICATION_FLAGS_NONE) : + Gtk::Application(argc, argv, application_id, flags), remote(false), enabled(nullptr) {} + + ~App(); + + static void usage(const char *me); + + static void version(); - static void usage(const char *me); - static void version(); protected: - virtual void on_startup(); - virtual void on_activate(); + virtual void on_startup(); + + virtual void on_activate(); + private: - virtual bool local_command_line_vfunc (char**& arguments, int& exit_status); - int on_command_line(const Glib::RefPtr &); - void run_by_name(const char *str, const Glib::RefPtr &cmd_line); + virtual bool local_command_line_vfunc(char **&arguments, int &exit_status); + + int on_command_line(const Glib::RefPtr &); + + void run_by_name(const char *str, const Glib::RefPtr &cmd_line); + + void create_config_dir(); - void create_config_dir(); + void on_about(const Glib::VariantBase &) { win->show_about(); } - void on_about(const Glib::VariantBase &) { win->show_about(); } - void on_quit(const Glib::VariantBase &) { quit(); } + void on_quit(const Glib::VariantBase &) { quit(); } - virtual void notify() { - g_simple_action_set_state(enabled, g_variant_new("b", !disabled.get())); - } + virtual void notify() { + g_simple_action_set_state(enabled, g_variant_new("b", !disabled.get())); + } - bool remote; - GSimpleAction *enabled; + bool remote; + GSimpleAction *enabled; }; class ReloadTrace : public Timeout { - void timeout() { - if (verbosity >= 2) - printf("Reloading gesture display\n"); - xstate->queue(sigc::mem_fun(*this, &ReloadTrace::reload)); - } - void reload() { trace.reset(init_trace()); } + void timeout() { + if (verbosity >= 2) + printf("Reloading gesture display\n"); + xstate->queue(sigc::mem_fun(*this, &ReloadTrace::reload)); + } + + void reload() { trace.reset(init_trace()); } } reload_trace; static void schedule_reload_trace() { reload_trace.set_timeout(1000); } extern const char *gui_buffer; -bool App::local_command_line_vfunc (char**& arg, int& exit_status) { - int i = 1; - while (arg[i] && arg[i][0] == '-') { - if (arg[i][1] == '-') { - if (!strcmp(arg[i], "--experimental")) { - experimental = true; - } else if (!strcmp(arg[i], "--verbose")) { - verbosity++; - } else if (!strcmp(arg[i], "--help")) { - usage(arg[0]); - exit_status = EXIT_SUCCESS; - return true; - } else if (!strcmp(arg[i], "--version")) { - version(); - exit_status = EXIT_SUCCESS; - return true; - } else if (!strcmp(arg[i], "--config-dir")) { - if (!arg[++i]) { - printf("Error: Option --config-dir requires an argument.\n"); - exit_status = EXIT_FAILURE; - return true; - } - config_dir = arg[i]; - } else { - printf("Error: Unknown option %s\n", arg[i]); - exit_status = EXIT_FAILURE; - return true; - } - } else { - for (int j = 1; arg[i][j]; j++) - switch (arg[i][j]) { - case 'c': - if (arg[i][j+1] || !arg[i+1]) { - printf("Error: Option -c requires an argument.\n"); - exit_status = EXIT_FAILURE; - return true; - } - config_dir = arg[++i]; - break; - case 'e': - experimental = true; - break; - case 'v': - verbosity++; - break; - case 'h': - usage(arg[0]); - exit_status = EXIT_SUCCESS; - return true; - default: - printf("Error: Unknown option -%c\n", arg[i][j]); - exit_status = EXIT_FAILURE; - return true; - } - } - i++; - } - - if (i > 1) { - for (int j = 1; j < i; j++) { - g_free(arg[j]); - arg[j] = 0; - } - for (int j = 0; arg[j+i]; j++) { - arg[j+1] = arg[j+i]; - arg[j+i] = 0; - } - } - - if (!register_application()) { - printf("Failed to register the application\n"); - exit_status = EXIT_FAILURE; - return true; - } - activate(); - return false; +bool App::local_command_line_vfunc(char **&arg, int &exit_status) { + int i = 1; + while (arg[i] && arg[i][0] == '-') { + if (arg[i][1] == '-') { + if (!strcmp(arg[i], "--experimental")) { + experimental = true; + } else if (!strcmp(arg[i], "--verbose")) { + verbosity++; + } else if (!strcmp(arg[i], "--help")) { + usage(arg[0]); + exit_status = EXIT_SUCCESS; + return true; + } else if (!strcmp(arg[i], "--version")) { + version(); + exit_status = EXIT_SUCCESS; + return true; + } else if (!strcmp(arg[i], "--config-dir")) { + if (!arg[++i]) { + printf("Error: Option --config-dir requires an argument.\n"); + exit_status = EXIT_FAILURE; + return true; + } + config_dir = arg[i]; + } else { + printf("Error: Unknown option %s\n", arg[i]); + exit_status = EXIT_FAILURE; + return true; + } + } else { + for (int j = 1; arg[i][j]; j++) + switch (arg[i][j]) { + case 'c': + if (arg[i][j + 1] || !arg[i + 1]) { + printf("Error: Option -c requires an argument.\n"); + exit_status = EXIT_FAILURE; + return true; + } + config_dir = arg[++i]; + break; + case 'e': + experimental = true; + break; + case 'v': + verbosity++; + break; + case 'h': + usage(arg[0]); + exit_status = EXIT_SUCCESS; + return true; + default: + printf("Error: Unknown option -%c\n", arg[i][j]); + exit_status = EXIT_FAILURE; + return true; + } + } + i++; + } + + if (i > 1) { + for (int j = 1; j < i; j++) { + g_free(arg[j]); + arg[j] = 0; + } + for (int j = 0; arg[j + i]; j++) { + arg[j + 1] = arg[j + i]; + arg[j + i] = 0; + } + } + + if (!register_application()) { + printf("Failed to register the application\n"); + exit_status = EXIT_FAILURE; + return true; + } + activate(); + return false; } void App::run_by_name(const char *str, const Glib::RefPtr &cmd_line) { - for (ActionDB::const_iterator i = actions.begin(); i != actions.end(); i++) { - if (i->second.name == std::string(str)) { - if (i->second.action) - xstate->queue(sigc::bind(sigc::mem_fun(xstate, &XState::run_action), i->second.action)); - return; - } - } - char *msg; - asprintf(&msg, _("Warning: No action \"%s\" defined\n"), str); - cmd_line->print(msg); - free(msg); + for (ActionDB::const_iterator i = actions.begin(); i != actions.end(); i++) { + if (i->second.name == std::string(str)) { + if (i->second.action) + xstate->queue(sigc::bind(sigc::mem_fun(xstate, &XState::run_action), i->second.action)); + return; + } + } + char *msg; + asprintf(&msg, _("Warning: No action \"%s\" defined\n"), str); + cmd_line->print(msg); + free(msg); } int App::on_command_line(const Glib::RefPtr &command_line) { - int argc; - char **arg = command_line->get_arguments(argc); - for (int i = 1; arg[i]; i++) - if (!strcmp(arg[i], "send")) { - if (!arg[++i]) - printf("Warning: Send requires an argument\n"); - else - run_by_name(arg[i], command_line); - } else if (!strcmp(arg[i], "show")) { - win->show(); - } else if (!strcmp(arg[i], "hide")) { - win->hide(); - } else if (!strcmp(arg[i], "disable")) { - disabled.set(true); - } else if (!strcmp(arg[i], "enable")) { - disabled.set(false); - } else if (!strcmp(arg[i], "about")) { - win->show_about(); - } else if (!strcmp(arg[i], "quit")) { - quit(); - } else { - char *msg; - asprintf(&msg, "Warning: Unknown command \"%s\".\n", arg[i]); - command_line->print(msg); - free(msg); - } - if (!arg[1] && remote) - win->show_hide(); - remote = true; - return true; + int argc; + char **arg = command_line->get_arguments(argc); + for (int i = 1; arg[i]; i++) + if (!strcmp(arg[i], "send")) { + if (!arg[++i]) + printf("Warning: Send requires an argument\n"); + else + run_by_name(arg[i], command_line); + } else if (!strcmp(arg[i], "show")) { + win->show(); + } else if (!strcmp(arg[i], "hide")) { + win->hide(); + } else if (!strcmp(arg[i], "disable")) { + disabled.set(true); + } else if (!strcmp(arg[i], "enable")) { + disabled.set(false); + } else if (!strcmp(arg[i], "about")) { + win->show_about(); + } else if (!strcmp(arg[i], "quit")) { + quit(); + } else { + char *msg; + asprintf(&msg, "Warning: Unknown command \"%s\".\n", arg[i]); + command_line->print(msg); + free(msg); + } + if (!arg[1] && remote) + win->show_hide(); + remote = true; + return true; } static void enabled_activated(GSimpleAction *simple, GVariant *parameter, gpointer user_data) { - disabled.set(!disabled.get()); + disabled.set(!disabled.get()); } void App::on_startup() { - Gtk::Application::on_startup(); + Gtk::Application::on_startup(); - Glib::RefPtr action; - action = Gio::SimpleAction::create("about"); - action->signal_activate().connect(sigc::mem_fun(*this, &App::on_about)); - add_action(action); + Glib::RefPtr action; + action = Gio::SimpleAction::create("about"); + action->signal_activate().connect(sigc::mem_fun(*this, &App::on_about)); + add_action(action); - action = Gio::SimpleAction::create("quit"); - action->signal_activate().connect(sigc::mem_fun(*this, &App::on_quit)); - add_action(action); + action = Gio::SimpleAction::create("quit"); + action->signal_activate().connect(sigc::mem_fun(*this, &App::on_quit)); + add_action(action); - enabled = g_simple_action_new_stateful("enabled", 0, g_variant_new_boolean(false)); - g_signal_connect(G_OBJECT(enabled), "activate", G_CALLBACK(enabled_activated), this); - g_action_map_add_action(G_ACTION_MAP(gobj()), G_ACTION(enabled)); + enabled = g_simple_action_new_stateful("enabled", 0, g_variant_new_boolean(false)); + g_signal_connect(G_OBJECT(enabled), "activate", G_CALLBACK(enabled_activated), this); + g_action_map_add_action(G_ACTION_MAP(gobj()), G_ACTION(enabled)); - Glib::RefPtr menu = Gio::Menu::create(); - menu->append(_("Enabled"), "app.enabled"); - menu->append(_("About"), "app.about"); - menu->append(_("Quit"), "app.quit"); - set_app_menu(menu); + Glib::RefPtr menu = Gio::Menu::create(); + menu->append(_("Enabled"), "app.enabled"); + menu->append(_("About"), "app.about"); + menu->append(_("Quit"), "app.quit"); + set_app_menu(menu); - disabled.connect(this); - notify(); + disabled.connect(this); + notify(); } void App::on_activate() { - if (win) - return; - - bindtextdomain("easystroke", is_dir("po") ? "po" : LOCALEDIR); - bind_textdomain_codeset("easystroke", "UTF-8"); - textdomain("easystroke"); - - create_config_dir(); - unsetenv("DESKTOP_AUTOSTART_ID"); - - signal(SIGINT, &sig_int); - signal(SIGCHLD, SIG_IGN); - - dpy = XOpenDisplay(nullptr); - if (!dpy) { - printf(_("Couldn't open display.\n")); - exit(EXIT_FAILURE); - } - - ROOT = DefaultRootWindow(dpy); - - prefs.init(); - action_watcher = new ActionDBWatcher; - action_watcher->init(); - - xstate = new XState; - grabber = new Grabber; - // Force enter events to be generated - XGrabPointer(dpy, ROOT, False, 0, GrabModeAsync, GrabModeAsync, None, None, CurrentTime); - XUngrabPointer(dpy, CurrentTime); - - trace.reset(init_trace()); - Glib::RefPtr screen = Gdk::Display::get_default()->get_default_screen(); - g_signal_connect(screen->gobj(), "composited-changed", &schedule_reload_trace, nullptr); - screen->signal_size_changed().connect(sigc::ptr_fun(&schedule_reload_trace)); - Notifier *trace_notify = new Notifier(sigc::ptr_fun(&schedule_reload_trace)); - prefs.color.connect(trace_notify); - - XTestGrabControl(dpy, True); - - Glib::RefPtr io = Glib::IOSource::create(ConnectionNumber(dpy), Glib::IO_IN); - io->connect(sigc::mem_fun(*xstate, &XState::handle)); - io->attach(); - try { - widgets = Gtk::Builder::create_from_string(gui_buffer); - } catch (Gtk::BuilderError &e) { - printf("Error building GUI: %s\n", e.what().c_str()); - exit(EXIT_FAILURE); - } - win = new Win; - add_window(win->get_window()); - if (!actions.get_root()->size_rec()) - win->get_window().show(); - hold(); + if (win) + return; + + bindtextdomain("easystroke", is_dir("po") ? "po" : LOCALEDIR); + bind_textdomain_codeset("easystroke", "UTF-8"); + textdomain("easystroke"); + + create_config_dir(); + unsetenv("DESKTOP_AUTOSTART_ID"); + + signal(SIGINT, &sig_int); + signal(SIGCHLD, SIG_IGN); + + dpy = XOpenDisplay(nullptr); + if (!dpy) { + printf(_("Couldn't open display.\n")); + exit(EXIT_FAILURE); + } + + ROOT = DefaultRootWindow(dpy); + + prefs.init(); + action_watcher = new ActionDBWatcher; + action_watcher->init(); + + xstate = new XState; + grabber = new Grabber; + // Force enter events to be generated + XGrabPointer(dpy, ROOT, False, 0, GrabModeAsync, GrabModeAsync, None, None, CurrentTime); + XUngrabPointer(dpy, CurrentTime); + + trace.reset(init_trace()); + Glib::RefPtr screen = Gdk::Display::get_default()->get_default_screen(); + g_signal_connect(screen->gobj(), "composited-changed", &schedule_reload_trace, nullptr); + screen->signal_size_changed().connect(sigc::ptr_fun(&schedule_reload_trace)); + Notifier *trace_notify = new Notifier(sigc::ptr_fun(&schedule_reload_trace)); + prefs.color.connect(trace_notify); + + XTestGrabControl(dpy, True); + + Glib::RefPtr io = Glib::IOSource::create(ConnectionNumber(dpy), Glib::IO_IN); + io->connect(sigc::mem_fun(*xstate, &XState::handle)); + io->attach(); + try { + widgets = Gtk::Builder::create_from_string(gui_buffer); + } catch (Gtk::BuilderError &e) { + printf("Error building GUI: %s\n", e.what().c_str()); + exit(EXIT_FAILURE); + } + win = new Win; + add_window(win->get_window()); + if (!actions.get_root()->size_rec()) + win->get_window().show(); + hold(); } void App::usage(const char *me) { - printf("The full easystroke documentation is available at the following address:\n"); - printf("\n"); - printf("http://easystroke.wiki.sourceforge.net/Documentation#content\n"); - printf("\n"); - printf("Usage: %s [OPTION]... [COMMAND]...\n", me); - printf("\n"); - printf("Commands:\n"); - printf(" send Execute action \n"); - printf(" show Show configuration window\n"); - printf(" hide Hide configuration window\n"); - printf(" disable Disable easystroke\n"); - printf(" enable Enable easystroke\n"); - printf(" about Show about dialog\n"); - printf(" quit Quit easystroke\n"); - printf("\n"); - printf("Options:\n"); - printf(" -c, --config-dir Directory for config files\n"); - printf(" -e --experimental Start in experimental mode\n"); - printf(" -v, --verbose Increase verbosity level\n"); - printf(" -h, --help Display this help and exit\n"); - printf(" --version Output version information and exit\n"); + printf("The full easystroke documentation is available at the following address:\n"); + printf("\n"); + printf("http://easystroke.wiki.sourceforge.net/Documentation#content\n"); + printf("\n"); + printf("Usage: %s [OPTION]... [COMMAND]...\n", me); + printf("\n"); + printf("Commands:\n"); + printf(" send Execute action \n"); + printf(" show Show configuration window\n"); + printf(" hide Hide configuration window\n"); + printf(" disable Disable easystroke\n"); + printf(" enable Enable easystroke\n"); + printf(" about Show about dialog\n"); + printf(" quit Quit easystroke\n"); + printf("\n"); + printf("Options:\n"); + printf(" -c, --config-dir Directory for config files\n"); + printf(" -e --experimental Start in experimental mode\n"); + printf(" -v, --verbose Increase verbosity level\n"); + printf(" -h, --help Display this help and exit\n"); + printf(" --version Output version information and exit\n"); } extern const char *version_string; + void App::version() { - printf("easystroke %s\n", version_string); - printf("\n"); - printf("Written by Thomas Jaeger .\n"); - exit(EXIT_SUCCESS); + printf("easystroke %s\n", version_string); + printf("\n"); + printf("Written by Thomas Jaeger .\n"); + exit(EXIT_SUCCESS); } void App::create_config_dir() { - if (config_dir == "") { - config_dir = getenv("HOME"); - config_dir += "/.easystroke"; - } - struct stat st; - char *name = realpath(config_dir.c_str(), nullptr); - - // check if the directory does not exist - if (lstat(name, &st) == -1) { - if (mkdir(config_dir.c_str(), 0777) == -1) { - printf(_("Error: Couldn't create configuration directory \"%s\"\n"), config_dir.c_str()); - exit(EXIT_FAILURE); - } - } else { - if (!S_ISDIR(st.st_mode)) { - printf(_("Error: \"%s\" is not a directory\n"), config_dir.c_str()); - exit(EXIT_FAILURE); - } - - - } - free (name); - config_dir += "/"; + if (config_dir == "") { + config_dir = getenv("HOME"); + config_dir += "/.easystroke"; + } + struct stat st; + char *name = realpath(config_dir.c_str(), nullptr); + + // check if the directory does not exist + if (lstat(name, &st) == -1) { + if (mkdir(config_dir.c_str(), 0777) == -1) { + printf(_("Error: Couldn't create configuration directory \"%s\"\n"), config_dir.c_str()); + exit(EXIT_FAILURE); + } + } else { + if (!S_ISDIR(st.st_mode)) { + printf(_("Error: \"%s\" is not a directory\n"), config_dir.c_str()); + exit(EXIT_FAILURE); + } + + + } + free(name); + config_dir += "/"; } App::~App() { - if (win) { - delete win; - trace->end(); - trace.reset(); - delete grabber; - XCloseDisplay(dpy); - prefs.execute_now(); - action_watcher->execute_now(); - } + if (win) { + delete win; + trace->end(); + trace.reset(); + delete grabber; + XCloseDisplay(dpy); + prefs.execute_now(); + action_watcher->execute_now(); + } } int main(int argc, char **argv) { - if (0) { - RStroke trefoil = Stroke::trefoil(); - trefoil->draw_svg("easystroke.svg"); - exit(EXIT_SUCCESS); - } - // GtkApplication needs dbus to even invoke the local_command_line function - if (argc > 1 && !strcmp(argv[1], "--help")) { - App::usage(argv[0]); - return EXIT_SUCCESS; - } - - if (argc > 1 && !strcmp(argv[1], "--version")) { - App::usage(argv[0]); - return EXIT_SUCCESS; - } - - App app(argc, argv, "org.easystroke.easystroke", Gio::APPLICATION_HANDLES_COMMAND_LINE); - return app.run(argc, argv); + printf("Listening..."); + + if (0) { + RStroke trefoil = Stroke::trefoil(); + trefoil->draw_svg("easystroke.svg"); + exit(EXIT_SUCCESS); + } + // GtkApplication needs dbus to even invoke the local_command_line function + if (argc > 1 && !strcmp(argv[1], "--help")) { + App::usage(argv[0]); + return EXIT_SUCCESS; + } + + if (argc > 1 && !strcmp(argv[1], "--version")) { + App::usage(argv[0]); + return EXIT_SUCCESS; + } + + App app(argc, argv, "org.easystroke.easystroke", Gio::APPLICATION_HANDLES_COMMAND_LINE); + return app.run(argc, argv); } void Button::run() { - grabber->suspend(); - xstate->fake_click(button); - grabber->resume(); + grabber->suspend(); + xstate->fake_click(button); + grabber->resume(); } void SendKey::run() { - if (!key) - return; - guint code = XKeysymToKeycode(dpy, key); - XTestFakeKeyEvent(dpy, code, true, 0); - XTestFakeKeyEvent(dpy, code, false, 0); + if (!key) + return; + guint code = XKeysymToKeycode(dpy, key); + XTestFakeKeyEvent(dpy, code, true, 0); + XTestFakeKeyEvent(dpy, code, false, 0); } void fake_unicode(gunichar c) { - static const KeySym numcode[10] = { XK_0, XK_1, XK_2, XK_3, XK_4, XK_5, XK_6, XK_7, XK_8, XK_9 }; - static const KeySym hexcode[6] = { XK_a, XK_b, XK_c, XK_d, XK_e, XK_f }; - - if (verbosity >= 3) { - char buf[7]; - buf[g_unichar_to_utf8(c, buf)] = '\0'; - printf("using unicode input for character %s\n", buf); - } - XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Control_L), true, 0); - XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Shift_L), true, 0); - XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_u), true, 0); - XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_u), false, 0); - XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Shift_L), false, 0); - XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Control_L), false, 0); - char buf[16]; - snprintf(buf, sizeof(buf), "%x", c); - for (int i = 0; buf[i]; i++) - if (buf[i] >= '0' && buf[i] <= '9') { - XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, numcode[buf[i]-'0']), true, 0); - XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, numcode[buf[i]-'0']), false, 0); - } else if (buf[i] >= 'a' && buf[i] <= 'f') { - XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, hexcode[buf[i]-'a']), true, 0); - XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, hexcode[buf[i]-'a']), false, 0); - } - XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_space), true, 0); - XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_space), false, 0); + static const KeySym numcode[10] = {XK_0, XK_1, XK_2, XK_3, XK_4, XK_5, XK_6, XK_7, XK_8, XK_9}; + static const KeySym hexcode[6] = {XK_a, XK_b, XK_c, XK_d, XK_e, XK_f}; + + if (verbosity >= 3) { + char buf[7]; + buf[g_unichar_to_utf8(c, buf)] = '\0'; + printf("using unicode input for character %s\n", buf); + } + XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Control_L), true, 0); + XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Shift_L), true, 0); + XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_u), true, 0); + XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_u), false, 0); + XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Shift_L), false, 0); + XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Control_L), false, 0); + char buf[16]; + snprintf(buf, sizeof(buf), "%x", c); + for (int i = 0; buf[i]; i++) + if (buf[i] >= '0' && buf[i] <= '9') { + XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, numcode[buf[i] - '0']), true, 0); + XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, numcode[buf[i] - '0']), false, 0); + } else if (buf[i] >= 'a' && buf[i] <= 'f') { + XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, hexcode[buf[i] - 'a']), true, 0); + XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, hexcode[buf[i] - 'a']), false, 0); + } + XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_space), true, 0); + XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_space), false, 0); } bool fake_char(gunichar c) { - char buf[16]; - snprintf(buf, sizeof(buf), "U%04X", c); - KeySym keysym = XStringToKeysym(buf); - if (keysym == NoSymbol) - return false; - KeyCode keycode = XKeysymToKeycode(dpy, keysym); - if (!keycode) - return false; - KeyCode modifier = 0; - int n; - KeySym *mapping = XGetKeyboardMapping(dpy, keycode, 1, &n); - if (mapping[0] != keysym) { - int i; - for (i = 1; i < n; i++) - if (mapping[i] == keysym) - break; - if (i == n) - return false; - XModifierKeymap *keymap = XGetModifierMapping(dpy); - modifier = keymap->modifiermap[i]; - XFreeModifiermap(keymap); - } - XFree(mapping); - if (modifier) - XTestFakeKeyEvent(dpy, modifier, true, 0); - XTestFakeKeyEvent(dpy, keycode, true, 0); - XTestFakeKeyEvent(dpy, keycode, false, 0); - if (modifier) - XTestFakeKeyEvent(dpy, modifier, false, 0); - return true; + char buf[16]; + snprintf(buf, sizeof(buf), "U%04X", c); + KeySym keysym = XStringToKeysym(buf); + if (keysym == NoSymbol) + return false; + KeyCode keycode = XKeysymToKeycode(dpy, keysym); + if (!keycode) + return false; + KeyCode modifier = 0; + int n; + KeySym *mapping = XGetKeyboardMapping(dpy, keycode, 1, &n); + if (mapping[0] != keysym) { + int i; + for (i = 1; i < n; i++) + if (mapping[i] == keysym) + break; + if (i == n) + return false; + XModifierKeymap *keymap = XGetModifierMapping(dpy); + modifier = keymap->modifiermap[i]; + XFreeModifiermap(keymap); + } + XFree(mapping); + if (modifier) + XTestFakeKeyEvent(dpy, modifier, true, 0); + XTestFakeKeyEvent(dpy, keycode, true, 0); + XTestFakeKeyEvent(dpy, keycode, false, 0); + if (modifier) + XTestFakeKeyEvent(dpy, modifier, false, 0); + return true; } void SendText::run() { - for (Glib::ustring::iterator i = text.begin(); i != text.end(); i++) - if (!fake_char(*i)) - fake_unicode(*i); + for (Glib::ustring::iterator i = text.begin(); i != text.end(); i++) + if (!fake_char(*i)) + fake_unicode(*i); } static struct { - guint mask; - guint sym; + guint mask; + guint sym; } modkeys[] = { - {GDK_SHIFT_MASK, XK_Shift_L}, - {GDK_CONTROL_MASK, XK_Control_L}, - {GDK_MOD1_MASK, XK_Alt_L}, - {GDK_MOD2_MASK, 0}, - {GDK_MOD3_MASK, 0}, - {GDK_MOD4_MASK, 0}, - {GDK_MOD5_MASK, 0}, - {GDK_SUPER_MASK, XK_Super_L}, - {GDK_HYPER_MASK, XK_Hyper_L}, - {GDK_META_MASK, XK_Meta_L}, + {GDK_SHIFT_MASK, XK_Shift_L}, + {GDK_CONTROL_MASK, XK_Control_L}, + {GDK_MOD1_MASK, XK_Alt_L}, + {GDK_MOD2_MASK, 0}, + {GDK_MOD3_MASK, 0}, + {GDK_MOD4_MASK, 0}, + {GDK_MOD5_MASK, 0}, + {GDK_SUPER_MASK, XK_Super_L}, + {GDK_HYPER_MASK, XK_Hyper_L}, + {GDK_META_MASK, XK_Meta_L}, }; static int n_modkeys = 10; class Modifiers : Timeout { - static std::set all; - static void update_mods() { - static guint mod_state = 0; - guint new_state = 0; - for (std::set::iterator i = all.begin(); i != all.end(); i++) - new_state |= (*i)->mods; - for (int i = 0; i < n_modkeys; i++) { - guint mask = modkeys[i].mask; - if ((mod_state & mask) ^ (new_state & mask)) - XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, modkeys[i].sym), new_state & mask, 0); - } - mod_state = new_state; - } - - guint mods; - Glib::ustring str; - OSD *osd; + static std::set all; + + static void update_mods() { + static guint mod_state = 0; + guint new_state = 0; + for (std::set::iterator i = all.begin(); i != all.end(); i++) + new_state |= (*i)->mods; + for (int i = 0; i < n_modkeys; i++) { + guint mask = modkeys[i].mask; + if ((mod_state & mask) ^ (new_state & mask)) + XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, modkeys[i].sym), new_state & mask, 0); + } + mod_state = new_state; + } + + guint mods; + Glib::ustring str; public: - Modifiers(guint mods_, Glib::ustring str_) : mods(mods_), str(str_), osd(nullptr) { - if (prefs.show_osd.get()) - set_timeout(150); - all.insert(this); - update_mods(); - } - bool operator==(const Modifiers &m) { - return mods == m.mods && str == m.str; - } - virtual void timeout() { - osd = new OSD(str); - } - ~Modifiers() { - all.erase(this); - update_mods(); - delete osd; - } + Modifiers(guint mods_, Glib::ustring str_) : mods(mods_), str(str_) { + all.insert(this); + update_mods(); + } + + bool operator==(const Modifiers &m) { + return mods == m.mods && str == m.str; + } + + virtual void timeout() { + } + + ~Modifiers() { + all.erase(this); + update_mods(); + } }; + std::set Modifiers::all; RModifiers ModAction::prepare() { - return RModifiers(new Modifiers(mods, get_label())); + return RModifiers(new Modifiers(mods, get_label())); } RModifiers SendKey::prepare() { - if (!mods) - return RModifiers(); - return RModifiers(new Modifiers(mods, ModAction::get_label())); + if (!mods) + return RModifiers(); + return RModifiers(new Modifiers(mods, ModAction::get_label())); } bool mods_equal(RModifiers m1, RModifiers m2) { - return m1 && m2 && *m1 == *m2; + return m1 && m2 && *m1 == *m2; } void Misc::run() { - switch (type) { - case SHOWHIDE: - win->show_hide(); - return; - case UNMINIMIZE: - grabber->unminimize(); - return; - case DISABLE: - disabled.set(!disabled.get()); - return; - default: - return; - } + switch (type) { + case SHOWHIDE: + win->show_hide(); + return; + case UNMINIMIZE: + grabber->unminimize(); + return; + case DISABLE: + disabled.set(!disabled.get()); + return; + default: + return; + } } bool is_file(std::string filename) { - struct stat st; - return lstat(filename.c_str(), &st) != -1 && S_ISREG(st.st_mode); + struct stat st; + return lstat(filename.c_str(), &st) != -1 && S_ISREG(st.st_mode); } bool is_dir(std::string dirname) { - struct stat st; - return lstat(dirname.c_str(), &st) != -1 && S_ISDIR(st.st_mode); + struct stat st; + return lstat(dirname.c_str(), &st) != -1 && S_ISDIR(st.st_mode); } diff --git a/service/po/ca.po b/service/po/ca.po deleted file mode 100644 index de9a4391..00000000 --- a/service/po/ca.po +++ /dev/null @@ -1,470 +0,0 @@ -# Catalan translation for easystroke -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2011-08-07 17:13+0000\n" -"Last-Translator: jordis \n" -"Language-Team: Catalan \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "Error: no es pot executar l'ordre «%s»: fork() ha fallat\n" - -msgid "None" -msgstr "Cap" - -msgid "Unminimize" -msgstr "Restaura" - -msgid "Show/Hide" -msgstr "Mostra/amaga" - -msgid "Disable (Enable)" -msgstr "Inhabilita (Habilita)" - -msgid "Default" -msgstr "Per defecte" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "Error: No s'ha pogut llegir la base de dades d'accions: %s.\n" - -msgid "rename() failed" -msgstr "rename() ha fallat" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "Error: No s'ha pogut desar la base de dades d'acciones: %s.\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"No s'ha pogut desar %1. Es perdran els canvis que heu fet. Assegureu-vos que " -"«%2» sigui un directori i que hi tingueu accés d'escriptura. Podeu canviar " -"el directori de la configuració mitjançant les opcions -c o --config-dir de " -"la línia d'ordres." - -msgid "actions" -msgstr "accions" - -msgid "Command" -msgstr "Ordre" - -msgid "Key" -msgstr "Tecla" - -msgid "Text" -msgstr "Text" - -msgid "Scroll" -msgstr "Desplaçament" - -msgid "Ignore" -msgstr "Ignora" - -msgid "Button" -msgstr "Botó" - -msgid "Misc" -msgstr "Altres" - -msgid "Stroke" -msgstr "Traç" - -msgid "Name" -msgstr "Nom" - -msgid "Type" -msgstr "Tipus" - -msgid "Details" -msgstr "Detalls" - -msgid "Application" -msgstr "Aplicació" - -msgid "Actions" -msgstr "Accions" - -msgid "Action \"%1\" is about to be deleted." -msgstr "Esteu a punt de suprimir l'acció «%1»." - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "Se suprimirà una acció" -msgstr[1] "Se suprimiran %1 accions" - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "Suprimeix una acció" -msgstr[1] "Suprimeix les accions" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 «%2» (que conté %3 %4) se suprimirà." - -msgid "The application" -msgstr "L'aplicació" - -msgid "The group" -msgstr "El grup" - -msgid "action" -msgid_plural "actions" -msgstr[0] "acció" -msgstr[1] "accions" - -msgid "Delete an Application" -msgstr "Suprimeix una aplicació" - -msgid "Delete an Application Group" -msgstr "Suprimeix un grup d'aplicacions" - -msgid "Group" -msgstr "Grup" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"Esteu a punt de vincular una acció a un sol clic. Això pot fer que sigui " -"difícil utilitzar el botó %1 en el futur. Segur que voleu continuar?" - -msgid "Record a New Stroke" -msgstr "Enregistra un traç nou" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"El proper traç s'associarà amb l'acció «%1». Podeu dibuixar-lo on vulgueu de " -"la pantalla (excepte als dos botons de sota)." - -msgid "Gesture %1" -msgstr "Gest %1" - -msgid "No Modifiers" -msgstr "Cap modificador" - -msgid "(Instantly) " -msgstr "(Instantàniament) " - -msgid "(Click & Hold) " -msgstr "(Manté el botó clicat) " - -msgid "Any Modifier" -msgstr "Qualsevol modificador" - -msgid "Button %1" -msgstr "Botó %1" - -msgid " + Scroll" -msgstr " + Desplaçament" - -msgid "'composite' not available" -msgstr "«composite» no està disponible" - -#, c-format -msgid "Error: %s\n" -msgstr "Error: %s\n" - -msgid "Tray icon disabled" -msgstr "S'ha inhabilitat la icona de la safata" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" -"Per tornar a obrir el diàleg de configuració, definiu una acció de tipus " -"Altres - Mostra/Amaga" - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "Avís: No s'ha definit cap acció «%s»\n" - -msgid "Enabled" -msgstr "Habilitat" - -msgid "About" -msgstr "" - -msgid "Quit" -msgstr "" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "No s'ha pogut obrir la pantalla.\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "Error: No s'ha pogut crear el directori de configuració «%s»\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "Error: «%s» no és un directori\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "Error: No s'han pogut desar les preferències: %s.\n" - -msgid "preferences" -msgstr "preferències" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "Error: No s'han pogut llegir les preferències.\n" - -msgid "XShape" -msgstr "" - -msgid "Timeout Off" -msgstr "Temps d'espera desactivat" - -msgid "Conservative" -msgstr "Conservador" - -msgid "Medium" -msgstr "Mitjà" - -msgid "Aggressive" -msgstr "Agressiu" - -msgid "Flick" -msgstr "Parpelleig" - -msgid "Custom" -msgstr "Personalitzat" - -msgid "Application (WM__CLASS)" -msgstr "Aplicació (WM__CLASS)" - -msgid "Device" -msgstr "Dispositiu" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "" - -msgid "" -msgstr "" - -msgid "Select a Mouse or Pen Button" -msgstr "Seleccioneu un botó del ratolí o del llapis" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "" -"Situeu el ratolí o el llapis al quadre següent i premeu el botó que voleu " -"seleccionar. També podeu prémer modificadors addicionals." - -msgid "Score" -msgstr "Puntuació" - -msgid "D_isabled" -msgstr "_Inhabilitat" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "Ha fallat la connexió al DBus" - -msgid "_Delete Current" -msgstr "" - -msgid "_Default" -msgstr "Per _defecte" - -msgid "Timeout" -msgstr "Temps d'espera" - -msgid "Instant Gestures" -msgstr "" - -msgid "Click & Hold" -msgstr "" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "Tecla de majú_scules" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "Sú_per" - -msgid "An_y Modifier" -msgstr "_Qualsevol modificador" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "" - -msgid "Show deleted rows" -msgstr "" - -msgid "Add Application" -msgstr "Afegeix una aplicació" - -msgid "Remove Application/Group" -msgstr "" - -msgid "Add Group" -msgstr "Afegeix un grup" - -msgid "Reset Action(s)" -msgstr "" - -msgid "Applications" -msgstr "Aplicacions" - -msgid "_Record Stroke" -msgstr "" - -msgid "_Add Action" -msgstr "" - -msgid "_Delete Action(s)" -msgstr "" - -msgid "_Hide" -msgstr "A_maga" - -msgid "_Gesture Button" -msgstr "" - -msgid "Additional Buttons" -msgstr "Botons addicionals" - -msgid "Initial Timeout (ms)" -msgstr "" - -msgid " Timeout (ms)" -msgstr " Temps d'espera (ms)" - -msgid "Behavior" -msgstr "Comportament" - -msgid "Method to show gestures" -msgstr "" - -msgid "Color" -msgstr "Color" - -msgid "Width" -msgstr "Amplada" - -msgid "Show popups (" -msgstr "" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "Mostra la icona a la barra de sistema" - -msgid "Show last gesture in tray" -msgstr "" - -msgid "Autostart easystroke" -msgstr "Inicia l'Easystroke automàticament" - -msgid "Appearance" -msgstr "Aspecte" - -msgid "Exceptions" -msgstr "Excepcions" - -msgid "_Add Exception" -msgstr "" - -msgid "_Remove Exception" -msgstr "" - -msgid "Preferences" -msgstr "Preferències" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "" - -msgid "(See Documentation)" -msgstr "(Vegeu la documentació)" - -msgid "Show popups on advanced gestures" -msgstr "" - -msgid "Show OSD" -msgstr "Mostra l'OSD" - -msgid "Invert Scroll Direction" -msgstr "" - -msgid "Scroll Speed" -msgstr "Velocitat de desplaçament" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "" - -msgid "Tablet Options" -msgstr "" - -msgid "Devices" -msgstr "Dispositius" - -msgid "Advanced" -msgstr "Avançat" - -msgid "_Matrix" -msgstr "" - -msgid "_History" -msgstr "_Historial" - -msgid "Easystroke Gesture Recognition" -msgstr "Reconeixement de gestos Easystroke" - -msgid "Control your desktop using mouse gestures" -msgstr "Controla el teu escriptori a través de gestos amb el ratolí" - -msgid "Enable" -msgstr "" - -msgid "Disable" -msgstr "" - -#~ msgid "Key combination..." -#~ msgstr "Combinació de tecles..." - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "Error: Ha fallat una captura. Es reiniciarà...\n" - -#~ msgid "(window manager frame)" -#~ msgstr "(marc del gestor de finestres)" diff --git a/service/po/cs.po b/service/po/cs.po deleted file mode 100644 index e3faac04..00000000 --- a/service/po/cs.po +++ /dev/null @@ -1,462 +0,0 @@ -# Czech translation for easystroke -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2013-03-14 20:01+0000\n" -"Last-Translator: Zbyněk Schwarz \n" -"Language-Team: Czech \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==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2013-03-27 01:12+0000\n" -"X-Generator: Launchpad (build 16540)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "Chyba: nelze spustit příkaz \"%s\": fork() selhalo\n" - -msgid "None" -msgstr "Žádný" - -msgid "Unminimize" -msgstr "Odminimalizovat" - -msgid "Show/Hide" -msgstr "Zobrazit/Skrýt" - -msgid "Disable (Enable)" -msgstr "Zakázat (Povolit)" - -msgid "Default" -msgstr "Výchozí" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "Chyba: Nelze přečíst databázi akcí: %s.\n" - -msgid "rename() failed" -msgstr "rename() selhalo" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "Chyba: Nelze zapsat databázi akcí: %s.\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"Nelze uložit %1. Vaše změny budou ztraceny. Ujistěte se, že \"%2\" je " -"složka a že do ní máte právo zápisu. Můžete změnit konfigurační složku " -"parametrem -c nebo --config-dir v terminálu." - -msgid "actions" -msgstr "akce" - -msgid "Command" -msgstr "Příkaz" - -msgid "Key" -msgstr "Klávesa" - -msgid "Text" -msgstr "Text" - -msgid "Scroll" -msgstr "Posun" - -msgid "Ignore" -msgstr "Ignorovat" - -msgid "Button" -msgstr "Tlačítko" - -msgid "Misc" -msgstr "Ostatní" - -msgid "Stroke" -msgstr "Gesto" - -msgid "Name" -msgstr "Název" - -msgid "Type" -msgstr "Typ" - -msgid "Details" -msgstr "Detaily" - -msgid "Application" -msgstr "Aplikace" - -msgid "Actions" -msgstr "Akce" - -msgid "Action \"%1\" is about to be deleted." -msgstr "Akce \"%1\" bude smazána." - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "Jedna akce bude smazána." -msgstr[1] "%1 akce budou smazány." -msgstr[2] "%1 akcí bude smazáno." - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "Smazat akci" -msgstr[1] "Smazat akce" -msgstr[2] "Smazat akce" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 \"%2\" (obsahující %3 %4) bude smazána." - -msgid "The application" -msgstr "Aplikace" - -msgid "The group" -msgstr "Skupina" - -msgid "action" -msgid_plural "actions" -msgstr[0] "akce" -msgstr[1] "akce" -msgstr[2] "akcí" - -msgid "Delete an Application" -msgstr "Smazat aplikaci" - -msgid "Delete an Application Group" -msgstr "Smazat skupinu aplikací" - -msgid "Group" -msgstr "Skupina" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"Chcete nastavit pro akci jedno kliknutí. Toto může v budouctnosti způsobovat " -"problémy při používání tlačítka %1. Opravdu chcete pokračovat?" - -msgid "Record a New Stroke" -msgstr "Zaznamenat nové gesto" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"Následující gesto bude asociováno s akcí \"%1\". Můžete malovat kdekoliv na " -"obrazovce (s výjimkou dvou tlačítek níže)." - -msgid "Gesture %1" -msgstr "Gesto %1" - -msgid "No Modifiers" -msgstr "Žádné modifikátory" - -msgid "(Instantly) " -msgstr "(Instantně) " - -msgid "(Click & Hold) " -msgstr "(Kliknout & držet) " - -msgid "Any Modifier" -msgstr "Jakékoliv modifikátory" - -msgid "Button %1" -msgstr "Tlačítko %1" - -msgid " + Scroll" -msgstr " + Rolovat" - -msgid "'composite' not available" -msgstr "'composite' není k dispozici" - -#, c-format -msgid "Error: %s\n" -msgstr "Chyba: %s\n" - -msgid "Tray icon disabled" -msgstr "Ikona v oznam. oblasti zakázána" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" -"K zobrazení dialogu nastavení byste měli nadefinovat akci " -"Ostatní....Zobrazit/Skrýt" - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "Varování: Nebyla nadefinována akce \"%s\"\n" - -msgid "Enabled" -msgstr "Povoleno" - -msgid "About" -msgstr "O programu" - -msgid "Quit" -msgstr "Konec" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "Nelze otevřít display.\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "Chyba: Nelze vytvořit konfigurační složku \"%s\"\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "Chyba: \"%s\" není složka\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "Chyba: Nelze uložit nastavení: %s.\n" - -msgid "preferences" -msgstr "nastavení" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "Chyba: Nelze načíst nastavení.\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "Timeout vypnutý" - -msgid "Conservative" -msgstr "Konzervativní" - -msgid "Medium" -msgstr "Střední" - -msgid "Aggressive" -msgstr "Agresivní" - -msgid "Flick" -msgstr "Trhnutí" - -msgid "Custom" -msgstr "Vlastní" - -msgid "Application (WM__CLASS)" -msgstr "Aplikace (WM__CLASS)" - -msgid "Device" -msgstr "Zařízení" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "Profil timeoutu" - -msgid "" -msgstr "" - -msgid "Select a Mouse or Pen Button" -msgstr "Zvolte tlačítko myši nebo pera" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "" -"Prosím umístěte myš do náslodujícího okna a stiskněte požadované tlačítko. " -"Můžete také držet libovolné pomocné klávesy (Ctrl, Alt, Shift)." - -msgid "Score" -msgstr "Skóre" - -msgid "D_isabled" -msgstr "Zakázán_o" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "Spojení s DBus selhalo" - -msgid "_Delete Current" -msgstr "S_mazat aktuální" - -msgid "_Default" -msgstr "_Výchozí" - -msgid "Timeout" -msgstr "Timeout" - -msgid "Instant Gestures" -msgstr "Rychlá gesta" - -msgid "Click & Hold" -msgstr "Kliknout & držet" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "J_akýkoliv modifikátor" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "Alternativně můžete zvolit tlačítko a modifikátory níže." - -msgid "Show deleted rows" -msgstr "Zobrazit smazané řady" - -msgid "Add Application" -msgstr "Přidat aplikaci" - -msgid "Remove Application/Group" -msgstr "Odebrat Aplikaci/Skupinu" - -msgid "Add Group" -msgstr "Přidat skupinu" - -msgid "Reset Action(s)" -msgstr "Resetovat Akce" - -msgid "Applications" -msgstr "Aplikace" - -msgid "_Record Stroke" -msgstr "_Zaznamenat gesto" - -msgid "_Add Action" -msgstr "Přid_at akci" - -msgid "_Delete Action(s)" -msgstr "S_mazat akce" - -msgid "_Hide" -msgstr "_Skrýt" - -msgid "_Gesture Button" -msgstr "Tlačítko _Gest" - -msgid "Additional Buttons" -msgstr "Další tlačítka" - -msgid "Initial Timeout (ms)" -msgstr "Počáteční timeout (ms)" - -msgid " Timeout (ms)" -msgstr " Timeout (ms)" - -msgid "Behavior" -msgstr "Chování" - -msgid "Method to show gestures" -msgstr "Metoda zobrazování gest" - -msgid "Color" -msgstr "Barva" - -msgid "Width" -msgstr "Šířka" - -msgid "Show popups (" -msgstr "Zobrazit vyskakovací okna (" - -msgid "to the right of the cursor)" -msgstr "napravo od kurzoru)" - -msgid "Show tray icon" -msgstr "Zobrazovat ikonu v oznamovací oblasti" - -msgid "Show last gesture in tray" -msgstr "Zobrazit poslední gesto v oznam. oblasti" - -msgid "Autostart easystroke" -msgstr "Automaticky spouštět EasyStroke" - -msgid "Appearance" -msgstr "Vzhled" - -msgid "Exceptions" -msgstr "Výjimky" - -msgid "_Add Exception" -msgstr "Přid_at výjimku" - -msgid "_Remove Exception" -msgstr "Odeb_rat výjimku" - -msgid "Preferences" -msgstr "Nastavení" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "Easystroke povolit pouze po aplikace uvedené v kartě 'Akce'" - -msgid "Timeout Gestures" -msgstr "Timeout Gest" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "Ignorovat čáry, které začínají být složitějšími gesty" - -msgid "(See Documentation)" -msgstr "(Navštivte dokumentaci)" - -msgid "Show popups on advanced gestures" -msgstr "Zobrazit vyskakovací okna u pokročilých gest" - -msgid "Show OSD" -msgstr "Zobrazit OSD" - -msgid "Invert Scroll Direction" -msgstr "Obrátit směr posuvu" - -msgid "Scroll Speed" -msgstr "Rychlost posuvu" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "Po každém gestu přesunout kurzor zpět na původní pozici." - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "Zůstat ve 'skrolovacím' a 'ignore' módu dokud je pero v dosahu" - -msgid "Tablet Options" -msgstr "Nastavení Tabletu" - -msgid "Devices" -msgstr "Zařízení" - -msgid "Advanced" -msgstr "Pokročilé" - -msgid "_Matrix" -msgstr "_Matrix" - -msgid "_History" -msgstr "_Historie" - -msgid "Easystroke Gesture Recognition" -msgstr "Easystroke rozeznávání gest" - -msgid "Control your desktop using mouse gestures" -msgstr "Ovládejte počítač pomocí gest myši" - -msgid "Enable" -msgstr "Povolit" - -msgid "Disable" -msgstr "Zakázat" diff --git a/service/po/de.po b/service/po/de.po deleted file mode 100644 index 04be50ff..00000000 --- a/service/po/de.po +++ /dev/null @@ -1,490 +0,0 @@ -# German translation of eaystroke. -# Copyright (C) 2008-2009 ThJaeger@gmail.com -# This file is distributed under the same license as the easystroke package. -# Tom Jaeger , 2008-2009. -# -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke 0.3.97\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2012-09-10 17:51+0000\n" -"Last-Translator: Maximilian Mhlbauer \n" -"Language-Team: German \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "" -"Fehler: Konnte Befehl \"%s\" nicht ausfhren: fork() fehlgeschlagen.\n" - -msgid "None" -msgstr "Keine" - -msgid "Unminimize" -msgstr "Unminimieren" - -msgid "Show/Hide" -msgstr "Anzeigen/Verstecken" - -msgid "Disable (Enable)" -msgstr "Deaktivieren (Aktivieren)" - -msgid "Default" -msgstr "Standard" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "Fehler: Konnte Aktionendatenbank nicht laden: %s.\n" - -msgid "rename() failed" -msgstr "rename() fehlgeschlagen" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "Fehler: Konnte Aktionendatenbank nicht speichern: %s.\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"Konnte %1 nicht speichern. Stellen sie sicher, dass \"%2\" ein Verzeichnis " -"ist und dass Sie Schreibzugriff darauf haben. Sie knnen das " -"Konfigurationsverzeichnis mit den Kommandozeilenoptionen -c oder --config-" -"dir verndern." - -msgid "actions" -msgstr "Aktionen" - -msgid "Command" -msgstr "Befehl" - -msgid "Key" -msgstr "Taste" - -msgid "Text" -msgstr "Text" - -msgid "Scroll" -msgstr "Scrollen" - -msgid "Ignore" -msgstr "Ignorieren" - -msgid "Button" -msgstr "Maustaste" - -msgid "Misc" -msgstr "Sonstige" - -msgid "Stroke" -msgstr "Geste" - -msgid "Name" -msgstr "Name" - -msgid "Type" -msgstr "Typ" - -msgid "Details" -msgstr "Details" - -msgid "Application" -msgstr "Anwendung" - -msgid "Actions" -msgstr "Aktionen" - -msgid "Action \"%1\" is about to be deleted." -msgstr "Wenn Sie fortfahren, wird die Aktion \"%1\" gelscht." - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "Wenn Sie fortfahren, wird eine Aktion gelscht." -msgstr[1] "Wenn Sie fortfahren, werden %1 Aktionen gelscht." - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "Eine Aktion lschen" -msgstr[1] "Aktionen lschen" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "Wenn Sie fortfahren, wird %1 \"%2\" (mitsamt %3 %4) gelscht." - -msgid "The application" -msgstr "die Anwendung" - -msgid "The group" -msgstr "die Gruppe" - -msgid "action" -msgid_plural "actions" -msgstr[0] "Aktion" -msgstr[1] "Aktionen" - -msgid "Delete an Application" -msgstr "Eine Anwendung lschen" - -msgid "Delete an Application Group" -msgstr "Eine Anwendungsgruppe lschen" - -msgid "Group" -msgstr "Gruppe" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"Sie sind dabei, eine Aktion einem einzelnen Klick zuzuordnen. Dies knnte " -"Schwierigkeiten bereiten, Maustaste %1 zu benutzen. Sind Sie sich sicher, " -"dass Sie fortfahren mchten?" - -msgid "Record a New Stroke" -msgstr "Eine neue Geste aufnehmen" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"Die nchste Geste wird mit der Aktion \"%1\" assoziert. Sie knnen sie an " -"beliebiger Position auf dem Bildschirm (mit Ausnahme der beiden " -"Schaltflchen) erstellen." - -msgid "Gesture %1" -msgstr "Geste %1" - -msgid "No Modifiers" -msgstr "Keine Modifier" - -msgid "(Instantly) " -msgstr "(Sofort) " - -msgid "(Click & Hold) " -msgstr "(Click & Hold) " - -msgid "Any Modifier" -msgstr "Beliebiger Modfier" - -msgid "Button %1" -msgstr "Maustaste %1" - -msgid " + Scroll" -msgstr " + Scrollen" - -msgid "'composite' not available" -msgstr "'composite' nicht verfgbar" - -#, c-format -msgid "Error: %s\n" -msgstr "Fehler: %s\n" - -msgid "Tray icon disabled" -msgstr "Tray-Symbol deaktiviert" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" -"Um den Konfigurationsdialog wieder anzuzeigen, knnen Sie eine Aktion vom " -"Typ Verschiedene..Anzeigen/Verstecken erstellen." - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "Warnung: Aktion \"%s\" nicht definiert\n" - -msgid "Enabled" -msgstr "Aktiv" - -msgid "About" -msgstr "ber" - -msgid "Quit" -msgstr "Schlieen" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "Konnte Verbindung zum Server nicht herstellen.\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "Fehler: Konnte Konfigurationsverzeichnis nicht erstellen: \"%s\"\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "Fehler: \"%s\" ist kein Verzeichnis\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "Fehler: Konnte Einstellungen nicht speichern: %s\n" - -msgid "preferences" -msgstr "Einstellungen" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "Fehler: Konnte Einstellungen nicht laden.\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Annotate (compiz)" -msgstr "Annotate (compiz)" - -msgid "Fire (compiz)" -msgstr "Feuer (compiz)" - -msgid "Water (compiz)" -msgstr "Wasser (compiz)" - -msgid "Timeout Off" -msgstr "Timeout Aus" - -msgid "Conservative" -msgstr "Konservativ" - -msgid "Medium" -msgstr "Mittel" - -msgid "Aggressive" -msgstr "Aggressiv" - -msgid "Flick" -msgstr "Flick" - -msgid "Custom" -msgstr "Benutzerdefiniert" - -msgid "Application (WM__CLASS)" -msgstr "Anwendung (WM__CLASS)" - -msgid "Device" -msgstr "Gert" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "Timeout-Profil" - -msgid "" -msgstr "" - -msgid "Select a Mouse or Pen Button" -msgstr "Eine Maus- oder Stifttaste auswhlen" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "" -"Drcken Sie auf die entsprechende Taste, whrend sich der Mauszeiger in der " -"Box befindet. Sie knnen auch zustzlich Modifier drcken." - -msgid "Score" -msgstr "Ergebnis" - -msgid "D_isabled" -msgstr "Deaktiviert" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "Verbindung zum DBus fehlgeschlagen" - -msgid "_Delete Current" -msgstr "Geste lschen" - -msgid "_Default" -msgstr "Standard" - -msgid "Timeout" -msgstr "Timeout" - -msgid "Instant Gestures" -msgstr "Sofortige Gesten" - -msgid "Click & Hold" -msgstr "Click & Hold" - -msgid "_Control" -msgstr "Strg" - -msgid "_Shift" -msgstr "Umschalt" - -msgid "_Alt" -msgstr "Alt" - -msgid "S_uper" -msgstr "Super" - -msgid "An_y Modifier" -msgstr "Beliebiger Modifier" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "" -"Alternativ knnen sie Maustaste und Modifiers weiter unten auswhlen." - -msgid "Show deleted rows" -msgstr "Zeige gelschte Zeilen" - -msgid "Add Application" -msgstr "Anwendung hinzufgen" - -msgid "Remove Application/Group" -msgstr "Entferne Anwendung/Gruppe" - -msgid "Add Group" -msgstr "Gruppe hinzufgen" - -msgid "Reset Action(s)" -msgstr "Aktion(en) zurcksetzen" - -msgid "Applications" -msgstr "Anwendungen" - -msgid "_Record Stroke" -msgstr "Geste aufnehmen" - -msgid "_Add Action" -msgstr "Aktion hinzufgen" - -msgid "_Delete Action(s)" -msgstr "Aktion(en) lschen" - -msgid "_Hide" -msgstr "Verstecken" - -msgid "_Gesture Button" -msgstr "Gesten-Maustaste" - -msgid "Additional Buttons" -msgstr "Zustzliche Maustasten" - -msgid "Initial Timeout (ms)" -msgstr "Anfngliches Timeout (ms)" - -msgid " Timeout (ms)" -msgstr " Timeout (ms)" - -msgid "Behavior" -msgstr "Verhalten" - -msgid "Method to show gestures" -msgstr "Methode zum Anzeigen der Gesten" - -msgid "Color" -msgstr "Farbe" - -msgid "Width" -msgstr "Breite" - -msgid "Show popups (" -msgstr "Popus anzeigen (" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "Zeige Tray-Symbol" - -msgid "Show last gesture in tray" -msgstr "Zeige die letzte Geste im Tray" - -msgid "Autostart easystroke" -msgstr "Automatisch starten" - -msgid "Appearance" -msgstr "Erscheinung" - -msgid "Exceptions" -msgstr "Ausnahmen" - -msgid "_Add Exception" -msgstr "Ausnahme hinzufgen" - -msgid "_Remove Exception" -msgstr "Ausnahme Entfernen" - -msgid "Preferences" -msgstr "Einstellungen" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "Timeout-Gesten" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "Ignoriere die Mausbewegung bei Advanced Gestures" - -msgid "(See Documentation)" -msgstr "(Siehe die Dokumentation)" - -msgid "Show popups on advanced gestures" -msgstr "Popups bei Advanced Gestures anzeigen" - -msgid "Show OSD" -msgstr "OSD anzeigen" - -msgid "Invert Scroll Direction" -msgstr "Scroll-Richtung invertieren" - -msgid "Scroll Speed" -msgstr "Scrollgeschwindigkeit" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "" -"Bewegen Sie den Mauszeiger nach einer Geste zurck in die Ausgangsposition" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "" -"Bleibe im 'Scrollen' oder 'Ignorieren' Modus solange der Stift in Reichweite " -"ist" - -msgid "Tablet Options" -msgstr "Tablet-Optionen" - -msgid "Devices" -msgstr "Gerte" - -msgid "Advanced" -msgstr "Fortgeschritten" - -msgid "_Matrix" -msgstr "Matrix" - -msgid "_History" -msgstr "Verlauf" - -msgid "Easystroke Gesture Recognition" -msgstr "Easystroke Gestenerkennung" - -msgid "Control your desktop using mouse gestures" -msgstr "Den Rechner mit Mausgesten bedienen" - -msgid "Enable" -msgstr "Aktivieren" - -msgid "Disable" -msgstr "Deaktivieren" - -#~ msgid "Key combination..." -#~ msgstr "Tastenkombination..." - -#~ msgid "(window manager frame)" -#~ msgstr "(Rahmen des Window-Managers)" - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "Fehler: Ein Grab ist fehlgeschlagen. Breche Geste ab...\n" - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "fr linkshndige Bedienung optimieren )" diff --git a/service/po/el.po b/service/po/el.po deleted file mode 100644 index cb2848ef..00000000 --- a/service/po/el.po +++ /dev/null @@ -1,480 +0,0 @@ -# Greek translation for easystroke -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2012-06-28 13:01+0000\n" -"Last-Translator: @l3x1k0 \n" -"Language-Team: Greek \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "" -"Σφάλμα: δεν μπόρεσε να εκτελεστεί η εντολή \"%s\": η fork() απέτυχε\n" - -msgid "None" -msgstr "Κανένα" - -msgid "Unminimize" -msgstr "Αποελαχιστοποίησε" - -msgid "Show/Hide" -msgstr "Εμφάνιση/Απόκρυψη" - -msgid "Disable (Enable)" -msgstr "Απενεργοποίηση (Ενεργοποίηση)" - -msgid "Default" -msgstr "Προεπιλογή" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "Σφάλμα: Δεν ήταν δυνατή η ανάγνωση της βάσης δράσεων: %s.\n" - -msgid "rename() failed" -msgstr "Η μετονομασία() απέτυχε" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "Σφάλμα: Δεν ήταν δυνατή η αποθήκευση της βάσης δράσεων: %s.\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"Δεν μπόρεσε να σωθεί %1. Οι αλλαγές σας θα χαθούν,Βεβαιωθείτε ότι ο \"%2\" " -"είναι κατάλογος και ότι έχετε δικαώματα εγγραφής σε αυτόν. Μπορείτε να " -"αλλάξετε τον κατάλογο διαμόρφωσης χρησιμοποιώντας τις επιλογές κελύφους -c ή " -"--config-dir." - -msgid "actions" -msgstr "ενέργειες" - -msgid "Command" -msgstr "Εντολή" - -msgid "Key" -msgstr "Πλήκτρο" - -msgid "Text" -msgstr "Κείμενο" - -msgid "Scroll" -msgstr "Κύλιση" - -msgid "Ignore" -msgstr "Παράβλεψη" - -msgid "Button" -msgstr "Κουμπί" - -msgid "Misc" -msgstr "Διάφορα" - -msgid "Stroke" -msgstr "Κτύπημα" - -msgid "Name" -msgstr "Όνομα" - -msgid "Type" -msgstr "Τύπος" - -msgid "Details" -msgstr "Λεπτομέρειες" - -msgid "Application" -msgstr "Εφαρμογή" - -msgid "Actions" -msgstr "Ενέργειες" - -msgid "Action \"%1\" is about to be deleted." -msgstr "Η δράση \"%1\" πρόκειται να διαγραφεί" - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "Μία δράση πρόκειται να διαγραφεί" -msgstr[1] "%1 δράσεις πρόκειται να διαγραφούν" - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "Διαγραφή μιας Δράσης" -msgstr[1] "Διαγραφή Δράσεων" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 \"%2\" (που περιέχει %3 %4) πρόκειται να διαγραφεί." - -msgid "The application" -msgstr "Η εφαρμογή" - -msgid "The group" -msgstr "Η ομάδα" - -msgid "action" -msgid_plural "actions" -msgstr[0] "δράση" -msgstr[1] "δράσεις" - -msgid "Delete an Application" -msgstr "Διαγραφή μιας Εφαρμογής" - -msgid "Delete an Application Group" -msgstr "Διαγραφή μιας Ομάδας Εφαρμογών" - -msgid "Group" -msgstr "Ομάδα" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"Πρόκειται να δεσμεύσετε μία δράση σε μονό κλικ. Αυτό μπορεί να δυσκολέψει " -"την χρήση του Κουμπιού %1 στο μέλλον. Είστε σίγουρος ότι θέλετε να " -"συνεχίσετε;" - -msgid "Record a New Stroke" -msgstr "Καταχωρήστε ένα Νέο Κτύπημα" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"Το επόμενο κτύπημα θα συσχετισθεί με την δράση \"%1\". Μπορείτε να " -"σχεδιάσετε οπουδήποτε στην οθόνη (εκτός από τα δύο κουμπιά παρακάτω)." - -msgid "Gesture %1" -msgstr "Χειρονομία %1" - -msgid "No Modifiers" -msgstr "Όχι Τροποποιητές" - -msgid "(Instantly) " -msgstr "(Άμεσα) " - -msgid "(Click & Hold) " -msgstr "(Κλικ & Κράτημα) Ε " - -msgid "Any Modifier" -msgstr "Κάθε Τροποποιητή" - -msgid "Button %1" -msgstr "Κουμπί %1" - -msgid " + Scroll" -msgstr " + Κύλιση" - -msgid "'composite' not available" -msgstr "Δεν είναι διαθέσιμο το 'composite'" - -#, c-format -msgid "Error: %s\n" -msgstr "Σφάλμα: %s\n" - -msgid "Tray icon disabled" -msgstr "Το εικονίδιο συστήματος απενργοποιήθηκε" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" -"Για να επαναφέρετε το παράθυρο διαμόρφωσης, θα πρέπει να ορίσετε μία δράση " -"τύπου Διάφορα...Εμφάνιση/Απόκρυψη." - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "Προειδοποίηση: Καμία δράση \"%s\" δεν έχει ορισθεί\n" - -msgid "Enabled" -msgstr "Ενεργοποιήθηκε" - -msgid "About" -msgstr "" - -msgid "Quit" -msgstr "" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "Δεν μπόρεσε να ανοιχθεί display.\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "Σφάλμα: Δεν μπόρεσε να δημιουργηθεί ο κατάλογος διαμόρφωσης \"%s\"\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "Σφάλμα: \"%s\" δεν είναι κατάλογος\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "Σφάλμα: Δεν σώθηκαν οι προτιμήσεις:%s.\n" - -msgid "preferences" -msgstr "προτιμήσεις" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "Σφάλμα: Δεν διαβάστηκαν οι προτιμήσεις.\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "Απενεργοποίηση Timeout" - -msgid "Conservative" -msgstr "Συντηρητικό" - -msgid "Medium" -msgstr "Μεσαίο" - -msgid "Aggressive" -msgstr "Επιθετικό" - -msgid "Flick" -msgstr "Flick" - -msgid "Custom" -msgstr "Προσαρμοσμένo" - -msgid "Application (WM__CLASS)" -msgstr "Εφαρμογή (WM__CLASS)" - -msgid "Device" -msgstr "Συσκευή" - -msgid "" -msgstr "<αμετάβλητο>" - -msgid "Timeout profile" -msgstr "Timeout προφίλ" - -msgid "" -msgstr "<Απενεργοποίηση Εφαρμογής>" - -msgid "Select a Mouse or Pen Button" -msgstr "Επιλέξτε ένα κουμπί Ποντικιού ή Πένας" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "" -"Παρακαλώ τοποθετήστε το ποντίκι ή την πένα σας στο παρακάτω κουτί και πιέστε " -"το πλήκτρο που θέλετε να επιλέξετε. Μπορείτε επίσης να κρατήσετε πατημένους " -"επιπλέον τροποποιητές." - -msgid "Score" -msgstr "Σκορ" - -msgid "D_isabled" -msgstr "_Απενεργοποίηση" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "Η σύνδεση στο DBus απέτυχε" - -msgid "_Delete Current" -msgstr "_Διαγραφή Τρέχοντος" - -msgid "_Default" -msgstr "_Προεπιλογή" - -msgid "Timeout" -msgstr "Timeout" - -msgid "Instant Gestures" -msgstr "Στιγμιαίες Χειρονομίες" - -msgid "Click & Hold" -msgstr "Κλικ & Κράτημα" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "Κάθ_ε Τροποποιητής" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "" -"Εναλλακτικά, μπορείτε να επιλέξετε κουμπί και τροποποιητές παρακάτω." - -msgid "Show deleted rows" -msgstr "Εμφάνιση διεγραμμένων γραμμών" - -msgid "Add Application" -msgstr "Προσθήκη Εφαρμογής" - -msgid "Remove Application/Group" -msgstr "Αφαίρεση Εφαρμογής/Ομάδας" - -msgid "Add Group" -msgstr "Προσθήκη Ομάδας" - -msgid "Reset Action(s)" -msgstr "Επαναφορά Δράσεων" - -msgid "Applications" -msgstr "Εφαρμογές" - -msgid "_Record Stroke" -msgstr "_Καταχώρηση Κτυπήματος" - -msgid "_Add Action" -msgstr "_Προσθήκη Δράσης" - -msgid "_Delete Action(s)" -msgstr "_Διαγραφή Δράσεων" - -msgid "_Hide" -msgstr "_Απόκρυψη" - -msgid "_Gesture Button" -msgstr "Κουμπί _Χειρονομίας" - -msgid "Additional Buttons" -msgstr "Πρόσθετα Κουμπιά" - -msgid "Initial Timeout (ms)" -msgstr "Αρχικό Όριο Χρόνου (ms)" - -msgid " Timeout (ms)" -msgstr " Timeout (ms)" - -msgid "Behavior" -msgstr "Συμπεριφορά" - -msgid "Method to show gestures" -msgstr "Μέθοδος εμφάνισης χειρονομιών" - -msgid "Color" -msgstr "Χρώμα" - -msgid "Width" -msgstr "Πλάτος" - -msgid "Show popups (" -msgstr "Εμφάνιση popups (" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "Εμφάνιση εικονιδίου συστήματος" - -msgid "Show last gesture in tray" -msgstr "Εμφάνιση τελευταία χειρονομίας στην περιοχή ειδοποιήσεων" - -msgid "Autostart easystroke" -msgstr "Αυτόματη έναρξη easystroke" - -msgid "Appearance" -msgstr "Εμφάνιση" - -msgid "Exceptions" -msgstr "Εξαιρέσεις" - -msgid "_Add Exception" -msgstr "_Προσθήκη Εξαίρεσης" - -msgid "_Remove Exception" -msgstr "_Αφαίρεση Εξαίρεσης" - -msgid "Preferences" -msgstr "Προτιμήσεις" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "Timeout χειρονομιών" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "Αγνοήστε κτυπήματε που οδηγούν σε προχωρημένες χειρονομίες" - -msgid "(See Documentation)" -msgstr "(Βλέπε Τεκμηρίωση)" - -msgid "Show popups on advanced gestures" -msgstr "Εμφάνιση popups σε προχωρημένες χειρονομίες" - -msgid "Show OSD" -msgstr "Εμφάνιση OSD" - -msgid "Invert Scroll Direction" -msgstr "Αντιστροφή Διεύθυνσης Κύλισης" - -msgid "Scroll Speed" -msgstr "Ταχύτητα Κύλισης" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "" -"Μετακινήστε τον κέρσορα πίσω στην αρχική του θέση ύστερα από κάθε χειρονομία" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "" -"Μείνετε σε κατάσταση 'κύλιση' και 'άγνοια' μέχρι η πένα να είναι μεταξύ του " -"εύρους" - -msgid "Tablet Options" -msgstr "Επιλογές Πινακίδας" - -msgid "Devices" -msgstr "Συσκευές" - -msgid "Advanced" -msgstr "Για προχωρημένους" - -msgid "_Matrix" -msgstr "_Μήτρα" - -msgid "_History" -msgstr "_Ιστορικό" - -msgid "Easystroke Gesture Recognition" -msgstr "Easystroke Αναγνώρηση Χειρονομιών" - -msgid "Control your desktop using mouse gestures" -msgstr "Ελέγξτε την επιφάνεια εργασίας χρησιμοποιώντας χειρονομίες ποντικιού" - -msgid "Enable" -msgstr "" - -msgid "Disable" -msgstr "" - -#~ msgid "Key combination..." -#~ msgstr "Συνδυασμός πλήκτρων..." - -#~ msgid "(window manager frame)" -#~ msgstr "(πλαίσιο διαχειρηστή παραθύρων)" - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "βελτιστοποίηση για χειρισμούς από αριστερόχειρες" - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "Σφάλμα: Η σύλληψη απέτυχε. Επαναφορά...\n" diff --git a/service/po/es.po b/service/po/es.po deleted file mode 100644 index 0e2520d9..00000000 --- a/service/po/es.po +++ /dev/null @@ -1,475 +0,0 @@ -# Spanish translation for easystroke -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2012-12-27 19:38+0000\n" -"Last-Translator: Eduardo Alberto Calvo \n" -"Language-Team: Spanish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "Error: no se puede ejecutar la orden «%s»: fork() falló\n" - -msgid "None" -msgstr "Ninguno" - -msgid "Unminimize" -msgstr "Desminimizar" - -msgid "Show/Hide" -msgstr "Mostrar/ocultar" - -msgid "Disable (Enable)" -msgstr "Desactivar (activar)" - -msgid "Default" -msgstr "Predeterminado" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "Error: No se puede leer la base de datos de acciones: %s.\n" - -msgid "rename() failed" -msgstr "falló rename()" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "Error: No se puede guardar la base de datos de acciones: %s.\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"No se puede guardar %1. Sus cambios se perderán. Asegúrese de que «%2» es un " -"directorio y que tiene permisos de escritura. Puede cambiar el directorio de " -"configuración usando las órdenes -c o -config." - -msgid "actions" -msgstr "acciones" - -msgid "Command" -msgstr "Orden" - -msgid "Key" -msgstr "Tecla" - -msgid "Text" -msgstr "Texto" - -msgid "Scroll" -msgstr "Desplazador" - -msgid "Ignore" -msgstr "Ignorar" - -msgid "Button" -msgstr "Botón" - -msgid "Misc" -msgstr "Varios" - -msgid "Stroke" -msgstr "Trazo" - -msgid "Name" -msgstr "Nombre" - -msgid "Type" -msgstr "Tipo" - -msgid "Details" -msgstr "Detalles" - -msgid "Application" -msgstr "Aplicación" - -msgid "Actions" -msgstr "Acciones" - -msgid "Action \"%1\" is about to be deleted." -msgstr "La acción «%1» está a punto de ser eliminada" - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "Una acción está a punto de ser eliminada." -msgstr[1] "%1 acciones están a punto de ser eliminadas." - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "Borrar una acción" -msgstr[1] "Borrar acciones" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 «%2» (que contienen %3 %4) están a punto de ser eliminadas." - -msgid "The application" -msgstr "La aplicación" - -msgid "The group" -msgstr "El grupo" - -msgid "action" -msgid_plural "actions" -msgstr[0] "acción" -msgstr[1] "acciones" - -msgid "Delete an Application" -msgstr "Borrar una aplicación" - -msgid "Delete an Application Group" -msgstr "Borrar un grupo de aplicación" - -msgid "Group" -msgstr "Grupo" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"Está a punto de unir una acción a una simple pulsación. Esto puede hacer " -"difícil usar el boton %1 en el futuro. ¿Está seguro/a de continuar?" - -msgid "Record a New Stroke" -msgstr "Grabar un nuevo trazo" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"El siguiente trazo será asociado con la acción \"%1\". Usted puede dibujarlo " -"en cualquier parte de la pantalla (excepto los dos botones de abajo)." - -msgid "Gesture %1" -msgstr "Gesto %1" - -msgid "No Modifiers" -msgstr "Sin modificadores" - -msgid "(Instantly) " -msgstr "(Instantaneamente) " - -msgid "(Click & Hold) " -msgstr "(Pulsar y mantener) " - -msgid "Any Modifier" -msgstr "Cualquier modificador" - -msgid "Button %1" -msgstr "Botón %1" - -msgid " + Scroll" -msgstr " + Desplazar" - -msgid "'composite' not available" -msgstr "«composición» no disponible" - -#, c-format -msgid "Error: %s\n" -msgstr "Error: %s\n" - -msgid "Tray icon disabled" -msgstr "Bandeja de iconos desactivada" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" -"Para mostrar el diálogo de configuración otra vez, debería definir una " -"acción de tipo Varios... Mostrar/Ocultar." - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "Aviso: No se ha definido la acción «%s»\n" - -msgid "Enabled" -msgstr "Activado" - -msgid "About" -msgstr "Acerca de" - -msgid "Quit" -msgstr "Salir" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "No se pudo abrir el display\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "Error: No se pudo crear el directorio de configuración \"%s\"\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "Error: «%s» no es un directorio\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "Error: No se pudieron guardar las preferencias: %s.\n" - -msgid "preferences" -msgstr "preferencias" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "Error: No se pudieron leer las preferencias.\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "Tiempo de apagado" - -msgid "Conservative" -msgstr "Conservador" - -msgid "Medium" -msgstr "Medio" - -msgid "Aggressive" -msgstr "Agresivo" - -msgid "Flick" -msgstr "Movimiento rápido" - -msgid "Custom" -msgstr "Personalizado" - -msgid "Application (WM__CLASS)" -msgstr "Aplicación (WM__CLASS)" - -msgid "Device" -msgstr "Dispositivo" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "Perfil de tiempo de espera" - -msgid "" -msgstr "" - -msgid "Select a Mouse or Pen Button" -msgstr "Seleccione un ratón o puntero" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "" -"Por favor coloque el puntero del ratón o puntero en la casilla inferior y " -"pulse el botón que desea seleccionar. También puede mantener pulsados " -"modificadores adicionales." - -msgid "Score" -msgstr "Puntuación" - -msgid "D_isabled" -msgstr "Desact_ivado" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "Falló la conexión DBus" - -msgid "_Delete Current" -msgstr "_Borrar actual" - -msgid "_Default" -msgstr "Pre_determinado" - -msgid "Timeout" -msgstr "Tiempo de espera" - -msgid "Instant Gestures" -msgstr "Gestos instantáneos" - -msgid "Click & Hold" -msgstr "Pulsar y mantener" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "Cual_quier modificador" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "Alternativamente, puede seleccionar botón y modificadores debajo." - -msgid "Show deleted rows" -msgstr "Mostrar filas borradas" - -msgid "Add Application" -msgstr "Añadir aplicación" - -msgid "Remove Application/Group" -msgstr "Eliminar aplicación/grupo" - -msgid "Add Group" -msgstr "Añadir grupo" - -msgid "Reset Action(s)" -msgstr "Reiniciar acción(es)" - -msgid "Applications" -msgstr "Aplicaciones" - -msgid "_Record Stroke" -msgstr "_Grabar Trazo" - -msgid "_Add Action" -msgstr "_Añadir acción" - -msgid "_Delete Action(s)" -msgstr "_Borrar acción(es)" - -msgid "_Hide" -msgstr "_Ocultar" - -msgid "_Gesture Button" -msgstr "Botón de _gesto" - -msgid "Additional Buttons" -msgstr "Botones adicionales" - -msgid "Initial Timeout (ms)" -msgstr "Tiempo de espera inicial (ms)" - -msgid " Timeout (ms)" -msgstr " Tiempo de espera (ms)" - -msgid "Behavior" -msgstr "Comportamiento" - -msgid "Method to show gestures" -msgstr "Método para mostrar los gestos" - -msgid "Color" -msgstr "Color" - -msgid "Width" -msgstr "Ancho" - -msgid "Show popups (" -msgstr "Mostrar menús emergentes (" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "Mostrar icono en el área de notificación" - -msgid "Show last gesture in tray" -msgstr "Mostrar el último gesto en la barra de tareas" - -msgid "Autostart easystroke" -msgstr "Iniciar automáticamente easystroke" - -msgid "Appearance" -msgstr "Apariencia" - -msgid "Exceptions" -msgstr "Excepciones" - -msgid "_Add Exception" -msgstr "_Añadir excepción" - -msgid "_Remove Exception" -msgstr "Elimina_r excepción" - -msgid "Preferences" -msgstr "Preferencias" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "Gestos de tiempo de espera" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "Ignorar trazos que lleven a gestos avanzados" - -msgid "(See Documentation)" -msgstr "(Ver documentación)" - -msgid "Show popups on advanced gestures" -msgstr "Mostrar menús emergentes en gestos avanzados" - -msgid "Show OSD" -msgstr "Mostrar OSD" - -msgid "Invert Scroll Direction" -msgstr "Invertir dirección de scroll" - -msgid "Scroll Speed" -msgstr "Velocidad de desplazamiento" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "Mover el cursor a la posición inicial después de cada gesto" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "" -"Permanecer en modo 'scroll' e 'ignorar' mientras el puntero esté dentro del " -"rango" - -msgid "Tablet Options" -msgstr "Opciones de tableta" - -msgid "Devices" -msgstr "Dispositivos" - -msgid "Advanced" -msgstr "Avanzado" - -msgid "_Matrix" -msgstr "_Matriz" - -msgid "_History" -msgstr "_Historial" - -msgid "Easystroke Gesture Recognition" -msgstr "Reconocedor de gestos Easystroke" - -msgid "Control your desktop using mouse gestures" -msgstr "Controlar su escriotrio usando gestos de ratón" - -msgid "Enable" -msgstr "Activar" - -msgid "Disable" -msgstr "Desactivar" - -#~ msgid "Key combination..." -#~ msgstr "Combinación de tec las..." - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "Error: Una sujeción falló. Restableciendo...\n" - -#~ msgid "(window manager frame)" -#~ msgstr "(marco de gestor de ventana)" - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "optimizar para zurdos )" diff --git a/service/po/fi.po b/service/po/fi.po deleted file mode 100644 index e272f2e9..00000000 --- a/service/po/fi.po +++ /dev/null @@ -1,474 +0,0 @@ -# Finnish translation for easystroke -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2011-01-07 03:33+0000\n" -"Last-Translator: Sauli Pelkonen \n" -"Language-Team: Finnish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "Virhe: komennon \"%s\": fork() suorittaminen epäonnistui\n" - -msgid "None" -msgstr "Ei mitään" - -msgid "Unminimize" -msgstr "Palauta" - -msgid "Show/Hide" -msgstr "Näytä/Piilota" - -msgid "Disable (Enable)" -msgstr "Poista käytöstä (Ota käyttöön)" - -msgid "Default" -msgstr "Oletus" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "Virhe: Ei voi lukea eletietokantaa: %s.\n" - -msgid "rename() failed" -msgstr "rename() epäonnistui" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "Virhe: Ei voi tallentaa eletietokantaa: %s.\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"Ei voi tallentaa sovellusta/ryhmää %1. Tehdyt muutokset häviävät. Varmista, " -"että \"%2\" on hakemisto, johon sinulla on kirjoitusoikeus. Voit vaihtaa " -"asetushakemiston käyttämällä komentoriviparametreja -c tai --config-dir." - -msgid "actions" -msgstr "toiminnot" - -msgid "Command" -msgstr "Komento" - -msgid "Key" -msgstr "Näppäin" - -msgid "Text" -msgstr "Teksti" - -msgid "Scroll" -msgstr "Vieritys" - -msgid "Ignore" -msgstr "Ohita" - -msgid "Button" -msgstr "Hiirinäppäin" - -msgid "Misc" -msgstr "Muut" - -msgid "Stroke" -msgstr "Ele" - -msgid "Name" -msgstr "Nimi" - -msgid "Type" -msgstr "Tyyppi" - -msgid "Details" -msgstr "Tiedot" - -msgid "Application" -msgstr "Sovellus" - -msgid "Actions" -msgstr "Toiminnot" - -msgid "Action \"%1\" is about to be deleted." -msgstr "Toiminto \"%1\" poistetaan." - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "Yksi toiminto poistetaan." -msgstr[1] "%1 toimintoa poistetaan." - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "Poista toiminto" -msgstr[1] "Poista toiminnot" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 \"%2\" (sisältää %3 %4) poistetaan." - -msgid "The application" -msgstr "Sovellus" - -msgid "The group" -msgstr "Ryhmä" - -msgid "action" -msgid_plural "actions" -msgstr[0] "toiminto" -msgstr[1] "toimintoa" - -msgid "Delete an Application" -msgstr "Poista sovellus" - -msgid "Delete an Application Group" -msgstr "Poista sovellusryhmä" - -msgid "Group" -msgstr "Ryhmä" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"Olet sitomassa toimintoa pelkkään hiiren napsautukseen. Hiirinapin %1 " -"käyttäminen voi olla vaikeaa jatkossa. Haluatko varmasti jatkaa?" - -msgid "Record a New Stroke" -msgstr "Sieppaa uusi ele" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"Seuraava ele sidotaan toimintoon \"%1\". Voit piirtää sen minne tahansa " -"ruudulla (lukuunottamatta kahta nappia alapuolella)." - -msgid "Gesture %1" -msgstr "Ele %1" - -msgid "No Modifiers" -msgstr "Ei muunnosnäppäimiä" - -msgid "(Instantly) " -msgstr "(Välittömästi) " - -msgid "(Click & Hold) " -msgstr "(Pidä pohjassa) " - -msgid "Any Modifier" -msgstr "Mikä tahansa" - -msgid "Button %1" -msgstr "Hiirinäppäin %1" - -msgid " + Scroll" -msgstr " + Vieritä" - -msgid "'composite' not available" -msgstr "'composite' ei saatavilla" - -#, c-format -msgid "Error: %s\n" -msgstr "Virhe: %s\n" - -msgid "Tray icon disabled" -msgstr "Ilmoitusalueen kuvake ei käytössä" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" -"Tuodaksesi asetusvalikon uudelleen esille määrittele toiminto Muut > " -"Näytä/Piilota." - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "Varoitus: Toimintoa \"%s\" ei määritelty\n" - -msgid "Enabled" -msgstr "Käytössä" - -msgid "About" -msgstr "" - -msgid "Quit" -msgstr "" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "Näyttöä ei voitu avata.\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "Virhe: Ei voi luoda asetushakemistoa \"%s\"\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "Virhe: \"%s\" ei ole hakemisto\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "Virhe: Ei voitu tallentaa asetuksia: %s.\n" - -msgid "preferences" -msgstr "asetukset" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "Virhe: Ei voitu lukea asetuksia.\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "Ei aikakatkaisua" - -msgid "Conservative" -msgstr "Konservatiivinen" - -msgid "Medium" -msgstr "Medium" - -msgid "Aggressive" -msgstr "Aggressiivinen" - -msgid "Flick" -msgstr "Näpäytys" - -msgid "Custom" -msgstr "Mukautettu" - -msgid "Application (WM__CLASS)" -msgstr "Sovellus (WM__CLASS)" - -msgid "Device" -msgstr "Laite" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "Aikakatkaisun profiili" - -msgid "" -msgstr "" - -msgid "Select a Mouse or Pen Button" -msgstr "Valitse hiiri- tai kynänäppäin" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "" -"Vie hiiri tai kynä alla olevaan laatikkoon ja paina näppäintä jonka haluat " -"valita. Voit myös samalla halutessasi pitää pohjassa muunnosnäppäimiä." - -msgid "Score" -msgstr "Pisteet" - -msgid "D_isabled" -msgstr "E_i käytössä" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "Yhteys D-Busiin epäonnistui" - -msgid "_Delete Current" -msgstr "_Poista nykyinen" - -msgid "_Default" -msgstr "_Oletus" - -msgid "Timeout" -msgstr "Aikakatkaisu" - -msgid "Instant Gestures" -msgstr "Välitön ele" - -msgid "Click & Hold" -msgstr "Pidä pohjassa" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "Mi_kä tahansa" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "Vaihtoehtoisesti voit valita näppäimen muunnoksineen alapuolelta." - -msgid "Show deleted rows" -msgstr "Näytä poistetut rivit" - -msgid "Add Application" -msgstr "Lisää sovellus" - -msgid "Remove Application/Group" -msgstr "Poista sovellus/ryhmä" - -msgid "Add Group" -msgstr "Lisää ryhmä" - -msgid "Reset Action(s)" -msgstr "Nollaa toiminto/toiminnot" - -msgid "Applications" -msgstr "Sovellukset" - -msgid "_Record Stroke" -msgstr "_Sieppaa ele" - -msgid "_Add Action" -msgstr "_Lisää toiminto" - -msgid "_Delete Action(s)" -msgstr "_Poista toiminto/toiminnot" - -msgid "_Hide" -msgstr "P_iilota" - -msgid "_Gesture Button" -msgstr "_Eleen liipaisinnäppäin" - -msgid "Additional Buttons" -msgstr "Muut hiirinäppäimet" - -msgid "Initial Timeout (ms)" -msgstr "Alustava aikakatkaisu (ms)" - -msgid " Timeout (ms)" -msgstr " Aikakatkaisu (ms)" - -msgid "Behavior" -msgstr "Toiminta" - -msgid "Method to show gestures" -msgstr "Eleiden näyttämismenetelmä" - -msgid "Color" -msgstr "Väri" - -msgid "Width" -msgstr "Leveys" - -msgid "Show popups (" -msgstr "Näytä ponnahdusikkunat (" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "Näytä ilmoitusalueen kuvake" - -msgid "Show last gesture in tray" -msgstr "Näytä viimeisin ele ilmaisinalueella" - -msgid "Autostart easystroke" -msgstr "Käynnistä easystroke automaattisesti" - -msgid "Appearance" -msgstr "Ulkoasu" - -msgid "Exceptions" -msgstr "Poikkeukset" - -msgid "_Add Exception" -msgstr "_Lisää poikkeus" - -msgid "_Remove Exception" -msgstr "_Poista poikkeus" - -msgid "Preferences" -msgstr "Asetukset" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "Eleiden aikakatkaisu" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "Jätä huomiotta edistyneisiin toimintoihin johtavat eleet" - -msgid "(See Documentation)" -msgstr "(Katso Dokumentointi [englanniksi] )" - -msgid "Show popups on advanced gestures" -msgstr "Näytä ponnahdusikkunat edistyneille eleille" - -msgid "Show OSD" -msgstr "Näytä viestit ruudulla" - -msgid "Invert Scroll Direction" -msgstr "Käänteinen vierityssuunta" - -msgid "Scroll Speed" -msgstr "Vieritysnopeus" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "" -"Palauta osoitin takaisin alkuperäiseen sijaintiin jokaisen liikkeen jälkeen" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "" -"Pysy 'Vieritys' tai 'Ohita' -tilassa niin kauan kuin kynä on alueella" - -msgid "Tablet Options" -msgstr "Tablet-valinnat" - -msgid "Devices" -msgstr "Laitteet" - -msgid "Advanced" -msgstr "Lisäasetukset" - -msgid "_Matrix" -msgstr "_Matriisi" - -msgid "_History" -msgstr "_Historia" - -msgid "Easystroke Gesture Recognition" -msgstr "Easystroke hiirieleet" - -msgid "Control your desktop using mouse gestures" -msgstr "Hallitse työpöytää hiirieleillä" - -msgid "Enable" -msgstr "" - -msgid "Disable" -msgstr "" - -#~ msgid "Key combination..." -#~ msgstr "Näppäinyhdistelmä" - -#~ msgid "(window manager frame)" -#~ msgstr "(ikkunointiohjelman kehys)" - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "optimoi vasenkätisen tablet-käytölle )" - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "Virhe: Sieppaus epäonnistui. Nollataan...\n" diff --git a/service/po/fr.po b/service/po/fr.po deleted file mode 100644 index 05d175ca..00000000 --- a/service/po/fr.po +++ /dev/null @@ -1,479 +0,0 @@ -# French translation for easystroke -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2012-10-28 10:42+0000\n" -"Last-Translator: Penegal \n" -"Language-Team: French \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "Erreur : impossible d'exécuter la commande « %s », échec de fork()\n" - -msgid "None" -msgstr "Aucun" - -msgid "Unminimize" -msgstr "Déminimiser" - -msgid "Show/Hide" -msgstr "Afficher / masquer" - -msgid "Disable (Enable)" -msgstr "Désactiver (Activer)" - -msgid "Default" -msgstr "Par défaut" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "Erreur : impossible de lire la base de données des actions %s\n" - -msgid "rename() failed" -msgstr "rename() a échoué" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "" -"Erreur : impossible d'enregistrer la base de données des actions %s.\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"Impossible d'enregistrer %1. Vos modifications seront perdues. Assurez vous " -"que « %2 » est un répertoire et que vous y avez accès en écriture. Vous " -"pouvez changer le répertoire de configuration à l'aide des options de ligne " -"de commande -c ou --config-dir." - -msgid "actions" -msgstr "actions" - -msgid "Command" -msgstr "Commande" - -msgid "Key" -msgstr "Touche" - -msgid "Text" -msgstr "Texte" - -msgid "Scroll" -msgstr "Défilement" - -msgid "Ignore" -msgstr "Ignorer" - -msgid "Button" -msgstr "Bouton" - -msgid "Misc" -msgstr "Divers" - -msgid "Stroke" -msgstr "Mouvement" - -msgid "Name" -msgstr "Nom" - -msgid "Type" -msgstr "Type" - -msgid "Details" -msgstr "Détails" - -msgid "Application" -msgstr "Application" - -msgid "Actions" -msgstr "Actions" - -msgid "Action \"%1\" is about to be deleted." -msgstr "L'action « %1 » va être supprimée." - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "Une action va être supprimée." -msgstr[1] "%1 actions vont être supprimées." - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "Supprimer une action" -msgstr[1] "Supprimer des actions" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 « %2 » (qui contient %3 %4) va être supprimé." - -msgid "The application" -msgstr "L'application" - -msgid "The group" -msgstr "Le groupe" - -msgid "action" -msgid_plural "actions" -msgstr[0] "action" -msgstr[1] "actions" - -msgid "Delete an Application" -msgstr "Supprimer une application" - -msgid "Delete an Application Group" -msgstr "Supprimer un groupe d'application" - -msgid "Group" -msgstr "Groupe" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"Vous allez assigner une action à un simple clic, ce qui peut rendre " -"difficile l'utilisation du bouton %1 à l'avenir. Êtes-vous sûr(e) de vouloir " -"continuer?" - -msgid "Record a New Stroke" -msgstr "Enregister un nouveau mouvement" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"Le prochain mouvement va être associé à l'action « %1 ». Vous pouvez le " -"tracer n'importe où sur l'écran (à l'exception des deux boutons ci-dessous)." - -msgid "Gesture %1" -msgstr "Geste %1" - -msgid "No Modifiers" -msgstr "Aucun modificateur" - -msgid "(Instantly) " -msgstr "(Instantané) " - -msgid "(Click & Hold) " -msgstr "(Cliquer & maintenir) " - -msgid "Any Modifier" -msgstr "Tout modificateur" - -msgid "Button %1" -msgstr "Bouton %1" - -msgid " + Scroll" -msgstr " + Défilement" - -msgid "'composite' not available" -msgstr "« composite » non disponible" - -#, c-format -msgid "Error: %s\n" -msgstr "Erreur : %s\n" - -msgid "Tray icon disabled" -msgstr "Icone de la barre des tâches désactivée" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" -"Pour afficher à nouveau la fenêtre de configuration, vous devriez définir " -"une action de type Divers... Afficher / masquer" - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "Attention : aucune action « %s » définie\n" - -msgid "Enabled" -msgstr "Activé" - -msgid "About" -msgstr "À propos" - -msgid "Quit" -msgstr "Quitter" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "Impossible d'ouvrir l'affichage.\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "Erreur : impossible de créer le répertoire de configuration « %s »\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "Erreur : « %s » n'est pas un répertoire\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "Erreur : impossible d'enregistrer les préférences %s.\n" - -msgid "preferences" -msgstr "préférences" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "Erreur : impossible de lire les préférences.\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "Arrêt du temps mort" - -msgid "Conservative" -msgstr "Conservatif" - -msgid "Medium" -msgstr "Moyen" - -msgid "Aggressive" -msgstr "Agressif" - -msgid "Flick" -msgstr "Pichenette" - -msgid "Custom" -msgstr "Personnalisé" - -msgid "Application (WM__CLASS)" -msgstr "Application (WM__CLASS)" - -msgid "Device" -msgstr "Périphérique" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "Profil du temps mort" - -msgid "" -msgstr "" - -msgid "Select a Mouse or Pen Button" -msgstr "Sélectionnez un bouton de souris ou de stylet" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "" -"Veuillez placer votre souris ou stylet dans le cadre ci-dessous et appuyer " -"sur le bouton que vous voulez sélectionner. Vous pouvez également maintenir " -"enfoncés des modificateurs supplémentaires." - -msgid "Score" -msgstr "Score" - -msgid "D_isabled" -msgstr "D_ésactivé" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "La connexion à DBus a échoué" - -msgid "_Delete Current" -msgstr "_Supprimer l'actuel" - -msgid "_Default" -msgstr "Par _défaut" - -msgid "Timeout" -msgstr "Temps mort" - -msgid "Instant Gestures" -msgstr "Gestes instantanés" - -msgid "Click & Hold" -msgstr "Cliquer & maintenir" - -msgid "_Control" -msgstr "_Contrôle" - -msgid "_Shift" -msgstr "Ma_j" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "_Tout modificateur" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "" -"Autrement, vous pouvez sélectionner un bouton et des modificateurs ci-" -"dessous." - -msgid "Show deleted rows" -msgstr "Afficher les rangées supprimées" - -msgid "Add Application" -msgstr "Ajouter une application" - -msgid "Remove Application/Group" -msgstr "Supprimer l'application ou le groupe" - -msgid "Add Group" -msgstr "Ajouter un groupe" - -msgid "Reset Action(s)" -msgstr "Réinitialiser les actions" - -msgid "Applications" -msgstr "Applications" - -msgid "_Record Stroke" -msgstr "_Enregistrer un mouvement" - -msgid "_Add Action" -msgstr "_Ajouter une action" - -msgid "_Delete Action(s)" -msgstr "_Supprimer les actions" - -msgid "_Hide" -msgstr "_Masquer" - -msgid "_Gesture Button" -msgstr "_Bouton de geste" - -msgid "Additional Buttons" -msgstr "Boutons supplémentaires" - -msgid "Initial Timeout (ms)" -msgstr "Temps mort initial (ms)" - -msgid " Timeout (ms)" -msgstr " Temps mort (ms)" - -msgid "Behavior" -msgstr "Comportement" - -msgid "Method to show gestures" -msgstr "Méthode pour indiquer les gestes" - -msgid "Color" -msgstr "Couleur" - -msgid "Width" -msgstr "Largeur" - -msgid "Show popups (" -msgstr "Afficher les popups (" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "Afficher l'icône dans la barre des tâches" - -msgid "Show last gesture in tray" -msgstr "Afficher le dernier geste dans la barre des tâches" - -msgid "Autostart easystroke" -msgstr "Démarrer automatiquement easystroke" - -msgid "Appearance" -msgstr "Apparence" - -msgid "Exceptions" -msgstr "Exceptions" - -msgid "_Add Exception" -msgstr "_Ajouter une exception" - -msgid "_Remove Exception" -msgstr "_Supprimer l'exception" - -msgid "Preferences" -msgstr "Préférences" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "Gestes de temps mort" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "Ignorer les mouvements menant à des gestes avancés" - -msgid "(See Documentation)" -msgstr "(voir la documentation)" - -msgid "Show popups on advanced gestures" -msgstr "Afficher les popups sur les gestes avancés" - -msgid "Show OSD" -msgstr "Afficher à l'écran" - -msgid "Invert Scroll Direction" -msgstr "Inverser le sens de défilement" - -msgid "Scroll Speed" -msgstr "Vitesse de défilement" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "Ramener le curseur à sa position originale après chaque geste." - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "" -"Rester en mode « défilement » et « ignorer »tant que le stylet est à portée" - -msgid "Tablet Options" -msgstr "Options de tablette" - -msgid "Devices" -msgstr "Périphériques" - -msgid "Advanced" -msgstr "Avancé" - -msgid "_Matrix" -msgstr "_Matrice" - -msgid "_History" -msgstr "_Historique" - -msgid "Easystroke Gesture Recognition" -msgstr "Reconnaissance gestuelle Easystroke" - -msgid "Control your desktop using mouse gestures" -msgstr "Contrôler votre bureau à l'aide de gestes de souris" - -msgid "Enable" -msgstr "Activer" - -msgid "Disable" -msgstr "Désactiver" - -#~ msgid "Key combination..." -#~ msgstr "Combinaison de touches..." - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "optimiser pour une opération de gaucher)" - -#~ msgid "(window manager frame)" -#~ msgstr "(cadre du gestionnaire de fenêtres)" - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "Erreur : une saisie a échoué. Redémarrage...\n" diff --git a/service/po/he.po b/service/po/he.po deleted file mode 100644 index a8398a16..00000000 --- a/service/po/he.po +++ /dev/null @@ -1,468 +0,0 @@ -# Hebrew translation for easystroke -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2009-11-19 08:54+0000\n" -"Last-Translator: Yaron \n" -"Language-Team: Hebrew \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "שגיאה: לא ניתן להפעיל את הפקודה \"%s\": fork() כשל\n" - -msgid "None" -msgstr "ללא" - -msgid "Unminimize" -msgstr "ביטול המזעור" - -msgid "Show/Hide" -msgstr "הצגה/הסתרה" - -msgid "Disable (Enable)" -msgstr "נטרול (הפעלה)" - -msgid "Default" -msgstr "ברירת מחדל" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "שגיאה: לא ניתן לקרוא את מסד נתוני הפעילות: %s.\n" - -msgid "rename() failed" -msgstr "rename() כשל" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "שגיאה: לא ניתן לשמור את מסד נתוני הפעילות: %s.\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" - -msgid "actions" -msgstr "פעולות" - -msgid "Command" -msgstr "פקודה" - -msgid "Key" -msgstr "מקש" - -msgid "Text" -msgstr "טקסט" - -msgid "Scroll" -msgstr "גלילה" - -msgid "Ignore" -msgstr "התעלמות" - -msgid "Button" -msgstr "לחצן" - -msgid "Misc" -msgstr "שונות" - -msgid "Stroke" -msgstr "לחיצה" - -msgid "Name" -msgstr "שם" - -msgid "Type" -msgstr "סוג" - -msgid "Details" -msgstr "פרטים" - -msgid "Application" -msgstr "יישום" - -msgid "Actions" -msgstr "פעולות" - -msgid "Action \"%1\" is about to be deleted." -msgstr "הפעולה \"%1\" עומדת להמחק." - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "פעולה אחת עומדת להמחק." -msgstr[1] "%1 פעולות עומדות להמחק." - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "מחיקת פעולה" -msgstr[1] "מחיקת פעולות" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 \"%2\" (המכיל %3 %4) עומד להמחק." - -msgid "The application" -msgstr "היישום" - -msgid "The group" -msgstr "הקבוצה" - -msgid "action" -msgid_plural "actions" -msgstr[0] "פעולה" -msgstr[1] "פעולות" - -msgid "Delete an Application" -msgstr "מחיקת יישום" - -msgid "Delete an Application Group" -msgstr "מחיקת קבוצת יישומים" - -msgid "Group" -msgstr "קבוצה" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"אתה עומד לאגד פעולה ללחיצה בודדת. פעולה זו תקשה על שימוש בלחצן %1 בעתיד. האם " -"אתה בטוח שברצונך להמשיך?" - -msgid "Record a New Stroke" -msgstr "הקלדת לחיצה חדשה" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"הלחיצה הבאה תהיה משוייכת עם הפעולה \"%1\". ניתן לצייר אותה בכל מקום במסך " -"(מלבד שני הלחצנים שלהלן)." - -msgid "Gesture %1" -msgstr "מחווה %1" - -msgid "No Modifiers" -msgstr "אין מקשי החלפה" - -msgid "(Instantly) " -msgstr "(באופן מיידי) " - -msgid "(Click & Hold) " -msgstr "(לחיצה והחזקה) " - -msgid "Any Modifier" -msgstr "כל מקש החלפה שהוא" - -msgid "Button %1" -msgstr "לחצן %1" - -msgid " + Scroll" -msgstr " + גלילה" - -msgid "'composite' not available" -msgstr "'חיבור' אינו זמין" - -#, c-format -msgid "Error: %s\n" -msgstr "שגיאה: %s\n" - -msgid "Tray icon disabled" -msgstr "סמל הדיווח מנוטרל" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" -"כדי להעלות את דו־שיח התצורה שוב, עליך להגדיר פעולה מסוג שונות...הצגה/הסתרה." - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "אזהרה: לא הוגדרה פעולה \"%s\"\n" - -msgid "Enabled" -msgstr "פעיל" - -msgid "About" -msgstr "" - -msgid "Quit" -msgstr "" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "לא ניתן לפתוח את התצוגה.\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "שגיאה: לא ניתן ליצור את תיקיית התצורה \"%s\"\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "שגיאה: \"%s\" איננה תיקייה\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "שגיאה: לא ניתן לשמור את ההעדפות: %s.\n" - -msgid "preferences" -msgstr "העדפות" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "שגיאה: לא ניתן לקרוא את ההעדפות.\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "פסק זמן כבוי" - -msgid "Conservative" -msgstr "שמרני" - -msgid "Medium" -msgstr "בינוני" - -msgid "Aggressive" -msgstr "תוקפני" - -msgid "Flick" -msgstr "הצלפה" - -msgid "Custom" -msgstr "מותאם אישית" - -msgid "Application (WM__CLASS)" -msgstr "יישום (WM__CLASS)" - -msgid "Device" -msgstr "התקן" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "" - -msgid "" -msgstr "<היישום מנוטרל>" - -msgid "Select a Mouse or Pen Button" -msgstr "בחירה בעכבר או בלחצן עט" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "" -"נא לשים את העכבר או את העט שלך להלן וללחוץ על הלחצן שברצונך לבחור. ניתן " -"להחזיק מקשי החלפה נוספים." - -msgid "Score" -msgstr "ניקוד" - -msgid "D_isabled" -msgstr "מ_נוטרל" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "החיבור אל DBus נכשל" - -msgid "_Delete Current" -msgstr "מחיקת ה_נוכחית" - -msgid "_Default" -msgstr "_ברירת מחדל" - -msgid "Timeout" -msgstr "תום הזמן" - -msgid "Instant Gestures" -msgstr "מחווה מיידית" - -msgid "Click & Hold" -msgstr "לחיצה והחזקה" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "_סופר" - -msgid "An_y Modifier" -msgstr "מקש ה_חלפה כלשהו" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "לחילופין, ניתן לבחור לחצנים ומקשי החלפה להלן." - -msgid "Show deleted rows" -msgstr "הצגת שורות שנמחקו" - -msgid "Add Application" -msgstr "הוספת יישום" - -msgid "Remove Application/Group" -msgstr "הסרת יישום/קבוצה" - -msgid "Add Group" -msgstr "הוספת קבוצה" - -msgid "Reset Action(s)" -msgstr "איפוס הפעולה/ות" - -msgid "Applications" -msgstr "יישומים" - -msgid "_Record Stroke" -msgstr "ה_קלטת התנועה" - -msgid "_Add Action" -msgstr "הוספת _פעולה" - -msgid "_Delete Action(s)" -msgstr "מחיקת _פעולה" - -msgid "_Hide" -msgstr "ה_סתרה" - -msgid "_Gesture Button" -msgstr "לחצן ה_מחווה" - -msgid "Additional Buttons" -msgstr "לחצנים נוספים" - -msgid "Initial Timeout (ms)" -msgstr "תום זמן התחלתי (מילישניות)" - -msgid " Timeout (ms)" -msgstr " תום הזמן (מילישניות)" - -msgid "Behavior" -msgstr "התנהגות" - -msgid "Method to show gestures" -msgstr "השיטה להצגת המחוות" - -msgid "Color" -msgstr "צבע" - -msgid "Width" -msgstr "רוחב" - -msgid "Show popups (" -msgstr "הצגת חלוניות מוקפצות (" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "הצגת סמל באזור הדיווחים" - -msgid "Show last gesture in tray" -msgstr "הצגת המחוהה האחרונה במגשית" - -msgid "Autostart easystroke" -msgstr "הפעלה אוטומטית של easystroke" - -msgid "Appearance" -msgstr "מראה" - -msgid "Exceptions" -msgstr "חריגות" - -msgid "_Add Exception" -msgstr "הוספת _חריגה" - -msgid "_Remove Exception" -msgstr "הסרת ה_חריגה" - -msgid "Preferences" -msgstr "העדפות" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "התעלמות מתנועות המובילות למחוות מתקדמות" - -msgid "(See Documentation)" -msgstr "(יש לעיין בתיעוד)" - -msgid "Show popups on advanced gestures" -msgstr "הצגת חלוניות מוקפצות עבור מחוות מתקדמות" - -msgid "Show OSD" -msgstr "הצגת תצוגה על המסך" - -msgid "Invert Scroll Direction" -msgstr "הפיכת כיוון הגלילה" - -msgid "Scroll Speed" -msgstr "מהירות הגלילה" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "" - -msgid "Tablet Options" -msgstr "אפשרויות מחשב הלוח" - -msgid "Devices" -msgstr "התקנים" - -msgid "Advanced" -msgstr "מתקדם" - -msgid "_Matrix" -msgstr "_מטריצה" - -msgid "_History" -msgstr "היס_טוריה" - -msgid "Easystroke Gesture Recognition" -msgstr "זיהוי תנועות עכבר של Easystroke" - -msgid "Control your desktop using mouse gestures" -msgstr "ניתן לשלוט בשולחן העבודה באמצעות תנועות העכבר" - -msgid "Enable" -msgstr "" - -msgid "Disable" -msgstr "" - -#~ msgid "Key combination..." -#~ msgstr "צירוף מקשים" - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "שגיאה: הלכידה נכשלה. מתבצע איפוס...\n" - -#~ msgid "(window manager frame)" -#~ msgstr "(מסגרת מנהל החלונות)" - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "התאמה לתפעול על ידי שמאליים (" diff --git a/service/po/hu.po b/service/po/hu.po deleted file mode 100644 index b9cf0b71..00000000 --- a/service/po/hu.po +++ /dev/null @@ -1,476 +0,0 @@ -# Hungarian translation for easystroke -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2012-02-15 22:36+0000\n" -"Last-Translator: Péter Trombitás \n" -"Language-Team: Hungarian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "" -"Hiba: nem sikerült végrehajtani a(z) \"%s\" parancsot: a fork() sikertelen\n" - -msgid "None" -msgstr "Nincs" - -msgid "Unminimize" -msgstr "Visszaállítás" - -msgid "Show/Hide" -msgstr "Megjelenítés/Elrejtés" - -msgid "Disable (Enable)" -msgstr "Tiltás (Engedélyezés)" - -msgid "Default" -msgstr "Alapértelmezett" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "Hiba: A(z) %s műveletadatbázis nem olvasható.\n" - -msgid "rename() failed" -msgstr "átnevezés() sikertelen" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "Hiba: Nem sikerült a(z) %s műveletadatbázis mentése.\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"A(z) %1 mentése sikertelen. Bizonyosodjon meg róla, hogy a(z) \"%2\" írható " -"könyvtár. Megváltoztathatja a beállítások könyvtárát, ha a -c vagy a --" -"config-dir kapcsolókat használja a parancssorban." - -msgid "actions" -msgstr "műveletek" - -msgid "Command" -msgstr "Parancs" - -msgid "Key" -msgstr "Billentyű" - -msgid "Text" -msgstr "Szöveg" - -msgid "Scroll" -msgstr "Görgetés" - -msgid "Ignore" -msgstr "Mellőzés" - -msgid "Button" -msgstr "Gomb" - -msgid "Misc" -msgstr "Egyéb" - -msgid "Stroke" -msgstr "Vonalrajz" - -msgid "Name" -msgstr "Név" - -msgid "Type" -msgstr "Típus" - -msgid "Details" -msgstr "Részletek" - -msgid "Application" -msgstr "Alkalmazás" - -msgid "Actions" -msgstr "Műveletek" - -msgid "Action \"%1\" is about to be deleted." -msgstr "A(z) \"%1\" művelet törlésére készül." - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "Egy művelet törlésére készül." -msgstr[1] "%1 művelet törlésére készül." - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "Művelet törlése" -msgstr[1] "Műveletek törlése" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 \"%2\" (mely tartalmazza ezeket: %3 %4) törlésére készül." - -msgid "The application" -msgstr "Az alkalmazás" - -msgid "The group" -msgstr "A csoport" - -msgid "action" -msgid_plural "actions" -msgstr[0] "művelet" -msgstr[1] "műveletek" - -msgid "Delete an Application" -msgstr "Egy alkalmazás törlése" - -msgid "Delete an Application Group" -msgstr "Egy alkalmazáscsoport törlése" - -msgid "Group" -msgstr "Csoport" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"Egy művelet hozzárendelésére készül egy egyszerű kattintáshoz. Ez " -"megnehezítheti a \"Button %1\" gomb használatát a jövőben. Biztosan " -"folytatja?" - -msgid "Record a New Stroke" -msgstr "Új vonalrajz rögzítése" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"A következő vonalrajz a(z) \"%1\" művelethez lesz hozzárendelve. Bárhova " -"rajzolhat a képernyőn (kivéve a két gombot ezen az üzenetablakon)" - -msgid "Gesture %1" -msgstr "%1. mozdulat" - -msgid "No Modifiers" -msgstr "Nincs módosító" - -msgid "(Instantly) " -msgstr "(Azonnal) " - -msgid "(Click & Hold) " -msgstr "(Lenyomva tart) " - -msgid "Any Modifier" -msgstr "Bármilyen módosító" - -msgid "Button %1" -msgstr "Button %1" - -msgid " + Scroll" -msgstr " + Görgetés" - -msgid "'composite' not available" -msgstr "a 'kompozit' nem elérhető" - -#, c-format -msgid "Error: %s\n" -msgstr "Hiba: %s\n" - -msgid "Tray icon disabled" -msgstr "A tálcaikon tiltva van" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" -"A beállítóablak újbóli megjelenítéséhez határozzon meg egy " -"Egyéb...Megjelenítés/Elrejtés műveletet." - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "Figyelem: Nincs \"%s\" meghatározva\n" - -msgid "Enabled" -msgstr "Engedélyezve" - -msgid "About" -msgstr "" - -msgid "Quit" -msgstr "" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "Nem nyitható meg a kijelző.\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "Hiba: Nem sikerült létrehozni a(z) \"%s\" konfigurációs könyvtárat\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "Hiba: \"%s\" nem könyvtár\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "Hiba: Ezen beállítások mentése sikertelen:%s.\n" - -msgid "preferences" -msgstr "beállítások" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "Hiba: Nem sikerült olvasni a beállításokat.\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "Késleltetés kikapcsolva" - -msgid "Conservative" -msgstr "Óvatos" - -msgid "Medium" -msgstr "Közepes" - -msgid "Aggressive" -msgstr "Agresszív" - -msgid "Flick" -msgstr "Pöccintés" - -msgid "Custom" -msgstr "Egyéni" - -msgid "Application (WM__CLASS)" -msgstr "Művelet (WM__CLASS)" - -msgid "Device" -msgstr "Eszköz" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "Késleltetés profilja" - -msgid "" -msgstr "" - -msgid "Select a Mouse or Pen Button" -msgstr "Toll- vagy egérgomb választása" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "" -"Helyezze az egeret vagy a tollat az alábbi dobozra, és nyomja meg a " -"használni kívánt gombot. Lehetősége van további módosítók hozzáadására is." - -msgid "Score" -msgstr "Pontszám" - -msgid "D_isabled" -msgstr "Le_tiltva" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "Nem sikerült csatlakozni a DBus-hoz" - -msgid "_Delete Current" -msgstr "_Jelenlegi törlése" - -msgid "_Default" -msgstr "Ala_pértelmezett" - -msgid "Timeout" -msgstr "Késleltetés" - -msgid "Instant Gestures" -msgstr "Azonnali mozdulatok" - -msgid "Click & Hold" -msgstr "Lenyomva tart" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "_Bármely módosító" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "Ha kívánja, lent megadhat egy gombot és módosítókat." - -msgid "Show deleted rows" -msgstr "Törölt sorok megjelenítése" - -msgid "Add Application" -msgstr "Alkalmazás hozzáadása" - -msgid "Remove Application/Group" -msgstr "Alkalmazás/Csoport eltávolítása" - -msgid "Add Group" -msgstr "Csoport hozzáadása" - -msgid "Reset Action(s)" -msgstr "Művelet(ek) visszaállítása" - -msgid "Applications" -msgstr "Alkalmazások" - -msgid "_Record Stroke" -msgstr "Vonalraj_z rögzítése" - -msgid "_Add Action" -msgstr "Művelet _hozzáadása" - -msgid "_Delete Action(s)" -msgstr "Művelet(ek) _törlése" - -msgid "_Hide" -msgstr "_Elrejtés" - -msgid "_Gesture Button" -msgstr "Művelet_gomb" - -msgid "Additional Buttons" -msgstr "További gombok" - -msgid "Initial Timeout (ms)" -msgstr "Kezdetoi késleltetés (ms)" - -msgid " Timeout (ms)" -msgstr " Késleltetés (ms)" - -msgid "Behavior" -msgstr "Viselkedés" - -msgid "Method to show gestures" -msgstr "Mozdulatok megjelenítési módszere" - -msgid "Color" -msgstr "Szín" - -msgid "Width" -msgstr "Szélesség" - -msgid "Show popups (" -msgstr "Felugró ablakok megjelenítése (" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "Tálcaikon megjelenítése" - -msgid "Show last gesture in tray" -msgstr "Utolsó mozdulat mutatása a tálcán" - -msgid "Autostart easystroke" -msgstr "Easystroke automatikus indítása" - -msgid "Appearance" -msgstr "Megjelenés" - -msgid "Exceptions" -msgstr "Kivételek" - -msgid "_Add Exception" -msgstr "_Kivétel hozzáadása" - -msgid "_Remove Exception" -msgstr "Ki_vétel eltávolítása" - -msgid "Preferences" -msgstr "Beállítások" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "Mozdulatok késleltetése" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "Bonyolultabb mozdulatokra vezető vonalrajzok figyelmen kívül hagyása" - -msgid "(See Documentation)" -msgstr "(Dokumentáció megtekintése)" - -msgid "Show popups on advanced gestures" -msgstr "Felugró ablakok megjelenítése bonyolult mozdulatoknál" - -msgid "Show OSD" -msgstr "OSD üzenetek megjelenítése" - -msgid "Invert Scroll Direction" -msgstr "Görgetés irányának megfordítása" - -msgid "Scroll Speed" -msgstr "Görgetés sebessége" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "Egér visszaállítása a kezdeti pozícióra minden mozdulat után" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "" -"'Görgetés' és 'figyelmen kívül hagyás' módban maradás, amíg a toll a " -"tartományon belül van" - -msgid "Tablet Options" -msgstr "Tábla beállításai" - -msgid "Devices" -msgstr "Eszközök" - -msgid "Advanced" -msgstr "Haladó" - -msgid "_Matrix" -msgstr "Mátri_x" - -msgid "_History" -msgstr "Elő_zmények" - -msgid "Easystroke Gesture Recognition" -msgstr "Easystroke gesztusfelismerés" - -msgid "Control your desktop using mouse gestures" -msgstr "Az asztali környezet irányítása egérgesztusokkal" - -msgid "Enable" -msgstr "" - -msgid "Disable" -msgstr "" - -#~ msgid "Key combination..." -#~ msgstr "Billentyűkombináció..." - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "Hiba: Egy elfogás sikertelen volt. Újrakezdés...\n" - -#~ msgid "(window manager frame)" -#~ msgstr "(ablakkezelő ablakkerete)" - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "optimalizálás balkezes műveletekre )" diff --git a/service/po/it.po b/service/po/it.po deleted file mode 100644 index 634d8b50..00000000 --- a/service/po/it.po +++ /dev/null @@ -1,479 +0,0 @@ -# Italian translation for easystroke -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2011-09-09 11:55+0000\n" -"Last-Translator: simone.sandri \n" -"Language-Team: Italian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "Errore: impossibile eseguire il comando \"%s\" fork() fallita\n" - -msgid "None" -msgstr "Nessuno" - -msgid "Unminimize" -msgstr "ripristina" - -msgid "Show/Hide" -msgstr "Mostra/nascondi" - -msgid "Disable (Enable)" -msgstr "Disabilita (abilita)" - -msgid "Default" -msgstr "Predefinito" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "Errore: impossibile leggere il database delle azioni: %s\n" - -msgid "rename() failed" -msgstr "rename() fallita" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "Errore: impossibile salvare il database delle azioni: %s\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"Impossibile salvare %1. Le modifiche andranno perdute. Assicurarsi che " -"\"%2\" sia una directory e di possedere i diritti di scrittura su di essa. È " -"possibile cambiare la cartella della configurazione utilizzando i parametri -" -"c o --config-dir nella riga di comando." - -msgid "actions" -msgstr "azioni" - -msgid "Command" -msgstr "Comando" - -msgid "Key" -msgstr "Tasto" - -msgid "Text" -msgstr "Testo" - -msgid "Scroll" -msgstr "Scorri" - -msgid "Ignore" -msgstr "Ignora" - -msgid "Button" -msgstr "Tasto" - -msgid "Misc" -msgstr "Varie" - -msgid "Stroke" -msgstr "Tratto" - -msgid "Name" -msgstr "Nome" - -msgid "Type" -msgstr "Tipo" - -msgid "Details" -msgstr "Dettagli" - -msgid "Application" -msgstr "Applicazione" - -msgid "Actions" -msgstr "Azioni" - -msgid "Action \"%1\" is about to be deleted." -msgstr "l'azione \"%1\" sta per essere cancellata." - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "Un azione sta per essere cancellata." -msgstr[1] "%1 azoni stanno per essere cancellate" - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "Cancella un Azione" -msgstr[1] "Cancella Azioni" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 \"%2\" (contententi %3 %4) sta per essere cancellata." - -msgid "The application" -msgstr "L'applicazione" - -msgid "The group" -msgstr "Il gruppo" - -msgid "action" -msgid_plural "actions" -msgstr[0] "azione" -msgstr[1] "azioni" - -msgid "Delete an Application" -msgstr "Cancella un applicazione" - -msgid "Delete an Application Group" -msgstr "Cancella un gruppo di applicazioni" - -msgid "Group" -msgstr "Gruppo" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"Si sta assegnando un azione ad un singolo click. Ciò può rendere difficile " -"in futuro l'utilizzo del pulsante %1. Si è sicuri di voler continuare?" - -msgid "Record a New Stroke" -msgstr "Registra un nuovo Gesto" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"Il prossimo gesto sarà associato con l'azione \"%1\". È possibile disegnarlo " -"ovunque nello schermo (eccetto nei due pulsanti sottostanti)." - -msgid "Gesture %1" -msgstr "Gesto %1" - -msgid "No Modifiers" -msgstr "Nessun modificatore" - -msgid "(Instantly) " -msgstr "(instantaneamente) " - -msgid "(Click & Hold) " -msgstr "(clicca e tieni premuto) " - -msgid "Any Modifier" -msgstr "Qualsiasi modificatore" - -msgid "Button %1" -msgstr "Pulsante %1" - -msgid " + Scroll" -msgstr " + scorrimento" - -msgid "'composite' not available" -msgstr "'composite' non disponibile" - -#, c-format -msgid "Error: %s\n" -msgstr "Errore: %s\n" - -msgid "Tray icon disabled" -msgstr "icona nel vassoio disabilitata" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" -"Per mostrare nuovamente la finestra di configurazione, si dovrebbe definire " -"un azione del tipo \"Varie->Mostra/nascondi\"." - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "Attenzione: Nessuna azione \"%s\" definita\n" - -msgid "Enabled" -msgstr "Attivo" - -msgid "About" -msgstr "" - -msgid "Quit" -msgstr "" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "Impossibile aprire il display.\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "Errore: Impossibile creare la cartella di configurazione \"%s\"\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "Errore: \"%s\" non è una cartella\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "Errore: Impossibile salvare le preferenze: %s.\n" - -msgid "preferences" -msgstr "preferenze" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "Errore: impossibile leggere le preferenze.\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "Fine timeout" - -msgid "Conservative" -msgstr "Conservativo" - -msgid "Medium" -msgstr "Dispositivo" - -msgid "Aggressive" -msgstr "Aggressivo" - -msgid "Flick" -msgstr "Flick" - -msgid "Custom" -msgstr "Personalizzato" - -msgid "Application (WM__CLASS)" -msgstr "Applicazione (WM__CLASS)" - -msgid "Device" -msgstr "Dispositivo" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "Timeout profilo" - -msgid "" -msgstr "" - -msgid "Select a Mouse or Pen Button" -msgstr "Selezionare un pulsante del mouse o della penna" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "" -"Posizionare il mouse o la penna nel riquadro sottostante e premere il " -"pulsante che si vuole selezionare. È anche possibile premere modificatori " -"addizionali." - -msgid "Score" -msgstr "Punteggio" - -msgid "D_isabled" -msgstr "D_isabilitato" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "Connessione a DBus fallita" - -msgid "_Delete Current" -msgstr "Cancella Corrente" - -msgid "_Default" -msgstr "Pre_definito" - -msgid "Timeout" -msgstr "Timeout" - -msgid "Instant Gestures" -msgstr "Gesti istantanei" - -msgid "Click & Hold" -msgstr "clicca e tieni premuto" - -msgid "_Control" -msgstr "_Controllo" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "Qualsiasi Modificatore (_y)" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "" -"Alternativamente, è possibile selezionare i pulsanti e modificatori " -"sottostanti." - -msgid "Show deleted rows" -msgstr "Mostra righe cancellate" - -msgid "Add Application" -msgstr "Aggiungi applicazione" - -msgid "Remove Application/Group" -msgstr "Rimuovi Applicazione/Gruppo" - -msgid "Add Group" -msgstr "Aggiungi gruppo" - -msgid "Reset Action(s)" -msgstr "Azzera Azione/i" - -msgid "Applications" -msgstr "Applicazioni" - -msgid "_Record Stroke" -msgstr "_Registra Gesto" - -msgid "_Add Action" -msgstr "_Aggiungi Azione" - -msgid "_Delete Action(s)" -msgstr "Cancella Azione/i (_d)" - -msgid "_Hide" -msgstr "_Nascondi" - -msgid "_Gesture Button" -msgstr "Pulsante _Gesto" - -msgid "Additional Buttons" -msgstr "Pulsanti aggiuntivi" - -msgid "Initial Timeout (ms)" -msgstr "Timeout iniziale (ms)" - -msgid " Timeout (ms)" -msgstr " Timeout (ms)" - -msgid "Behavior" -msgstr "Comportamento" - -msgid "Method to show gestures" -msgstr "Metodi per mostrari i gesti" - -msgid "Color" -msgstr "Colore" - -msgid "Width" -msgstr "Larghezza" - -msgid "Show popups (" -msgstr "Mostra popup (" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "Mostrare l'icona nell'area di notifica" - -msgid "Show last gesture in tray" -msgstr "Mostra l'ultimo gesto nel vassoio" - -msgid "Autostart easystroke" -msgstr "esegui automaticamente easystroke" - -msgid "Appearance" -msgstr "Aspetto" - -msgid "Exceptions" -msgstr "Eccezioni" - -msgid "_Add Exception" -msgstr "_Aggiungi Eccezione" - -msgid "_Remove Exception" -msgstr "_Rimuovi Eccezione" - -msgid "Preferences" -msgstr "Preferenze" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "Timeout gesti" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "Ignora i gesti che portano ai \"gesti avanzati\"" - -msgid "(See Documentation)" -msgstr "(vedi la documentazione)" - -msgid "Show popups on advanced gestures" -msgstr "Mostra popup nei \"gesti avanzati\"" - -msgid "Show OSD" -msgstr "Mostra OSD" - -msgid "Invert Scroll Direction" -msgstr "Invertire direzione di scorrimento" - -msgid "Scroll Speed" -msgstr "Velocità di scorrimento" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "" -"Rimetti il cursore nella posizione di partenza al termine di ogni gesture" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "" -"Rimani nella modalità 'scorri' e 'ignora' fintanto che la penna è " -"all'interno del range" - -msgid "Tablet Options" -msgstr "Opzioni Tablet" - -msgid "Devices" -msgstr "Dispositivi" - -msgid "Advanced" -msgstr "Avanzato" - -msgid "_Matrix" -msgstr "_Matrice" - -msgid "_History" -msgstr "Cronologia (_H)" - -msgid "Easystroke Gesture Recognition" -msgstr "Easystroke riconoscimento gesti" - -msgid "Control your desktop using mouse gestures" -msgstr "Controlla la scrivania utilizzando i gesti del muse" - -msgid "Enable" -msgstr "" - -msgid "Disable" -msgstr "" - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "Errore: acquisizione fallita. Resetto...\n" - -#~ msgid "(window manager frame)" -#~ msgstr "cornice del gestore finestre" - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "ottimizza operazioni per mancini )" - -#~ msgid "Key combination..." -#~ msgstr "Combinazione di tasti..." diff --git a/service/po/ja.po b/service/po/ja.po deleted file mode 100644 index 38083a83..00000000 --- a/service/po/ja.po +++ /dev/null @@ -1,456 +0,0 @@ -# Japanese translation for easystroke -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2010-05-04 06:50+0000\n" -"Last-Translator: kawaji \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "エラー: コマンド \"%s\" 実行不可: fork() 失敗\n" - -msgid "None" -msgstr "何もしない" - -msgid "Unminimize" -msgstr "最小化解除" - -msgid "Show/Hide" -msgstr "表示/隠す" - -msgid "Disable (Enable)" -msgstr "無効化 (有効化)" - -msgid "Default" -msgstr "デフォルト" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "エラー: アクションのデータベースが読めませんでした: %s.\n" - -msgid "rename() failed" -msgstr "rename() 失敗" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "エラー: アクションのデータベースが保存できませんでした: %s.\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"%1 の保存ができませんでした。変更内容は失われます。\"%2\" が書き込み権限を有するディレクトリであるか確かめてください。-c または --" -"config-dir コマンドラインオプションを使用して、設定ファイル用のディレクトリを変更することが可能です。" - -msgid "actions" -msgstr "アクション" - -msgid "Command" -msgstr "コマンド" - -msgid "Key" -msgstr "キー" - -msgid "Text" -msgstr "テキスト" - -msgid "Scroll" -msgstr "スクロール" - -msgid "Ignore" -msgstr "無視" - -msgid "Button" -msgstr "ボタン" - -msgid "Misc" -msgstr "その他" - -msgid "Stroke" -msgstr "ストローク" - -msgid "Name" -msgstr "名前" - -msgid "Type" -msgstr "種類" - -msgid "Details" -msgstr "詳細" - -msgid "Application" -msgstr "アプリケーション" - -msgid "Actions" -msgstr "アクション" - -msgid "Action \"%1\" is about to be deleted." -msgstr "アクション \"%1\" が削除されます。" - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "" -msgstr[1] "" - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "アクションを削除" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 \"%2\" (含有数 %3 %4 ) が削除されます" - -msgid "The application" -msgstr "アプリケーション" - -msgid "The group" -msgstr "グループ" - -msgid "action" -msgid_plural "actions" -msgstr[0] "アクション" - -msgid "Delete an Application" -msgstr "アプリケーションを削除" - -msgid "Delete an Application Group" -msgstr "アプリケーション・グループを削除" - -msgid "Group" -msgstr "グループ" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"シングル・クリックにアクションを割り当てようとしています。これにより、ボタン %1 の使用が今後難しくなる可能性があります。本当に設定を続けますか?" - -msgid "Record a New Stroke" -msgstr "新しいストロークを記録" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"これから行うストロークが、アクション \"%1\" と関連付けられます。画面のどの場所でもストロークの描画ができます(下の2つのボタンを除く)" - -msgid "Gesture %1" -msgstr "ジェスチャ %1" - -msgid "No Modifiers" -msgstr "修飾キーなし" - -msgid "(Instantly) " -msgstr "(インスタント) " - -msgid "(Click & Hold) " -msgstr "(クリック & ホールド) " - -msgid "Any Modifier" -msgstr "任意の修飾キー" - -msgid "Button %1" -msgstr "ボタン %1" - -msgid " + Scroll" -msgstr " + スクロール" - -msgid "'composite' not available" -msgstr "”コンポジット”が利用できません" - -#, c-format -msgid "Error: %s\n" -msgstr "エラー: %s\n" - -msgid "Tray icon disabled" -msgstr "トレイアイコン無効" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "警告: アクション \"%s\" は定義されていません\n" - -msgid "Enabled" -msgstr "有効" - -msgid "About" -msgstr "" - -msgid "Quit" -msgstr "" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "ディスプレイを開けませんでした。\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "エラー: 設定ファイル用ディレクトリ \"%s\" の作成ができませんでした\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "エラー: \"%s\" はディレクトリではありません\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "エラー: 設定を保存できませんでした: %s.\n" - -msgid "preferences" -msgstr "設定" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "エラー: 設定を読めませんでした。\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "タイムアウトなし" - -msgid "Conservative" -msgstr "長め" - -msgid "Medium" -msgstr "中程度" - -msgid "Aggressive" -msgstr "短め" - -msgid "Flick" -msgstr "フリック" - -msgid "Custom" -msgstr "カスタム" - -msgid "Application (WM__CLASS)" -msgstr "アプリケーション(WM__CLASS)" - -msgid "Device" -msgstr "デバイス" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "タイムアウトのプロファイル" - -msgid "" -msgstr "<アプリ無効>" - -msgid "Select a Mouse or Pen Button" -msgstr "マウスまたはペンのボタンを選択" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "マウスやペンを下のボックスに置いてから、選択したいボタンを押してください。追加の修飾キーをホールドすることも可能です。" - -msgid "Score" -msgstr "スコア" - -msgid "D_isabled" -msgstr "無効(_I)" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "DBus への接続に失敗" - -msgid "_Delete Current" -msgstr "現在の設定を削除(_D)" - -msgid "_Default" -msgstr "デフォルト(_D)" - -msgid "Timeout" -msgstr "タイムアウト" - -msgid "Instant Gestures" -msgstr "インスタント・ジェスチャ" - -msgid "Click & Hold" -msgstr "クリック & ホールド" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "任意の修飾キー(_Y)" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "代わりに、ボタンや修飾キーを下から選択することもできます。" - -msgid "Show deleted rows" -msgstr "削除した行を表示" - -msgid "Add Application" -msgstr "アプリケーションを追加" - -msgid "Remove Application/Group" -msgstr "アプリケーション/グループを削除" - -msgid "Add Group" -msgstr "グループを追加" - -msgid "Reset Action(s)" -msgstr "アクションを再設定" - -msgid "Applications" -msgstr "アプリケーション" - -msgid "_Record Stroke" -msgstr "ストロークを記録(_R)" - -msgid "_Add Action" -msgstr "アクションを追加(_A)" - -msgid "_Delete Action(s)" -msgstr "アクションを削除(_D)" - -msgid "_Hide" -msgstr "隠す(_H)" - -msgid "_Gesture Button" -msgstr "ジェスチャ・ボタン(_G)" - -msgid "Additional Buttons" -msgstr "さらに追加するボタン" - -msgid "Initial Timeout (ms)" -msgstr "初期タイムアウト(ミリ秒)" - -msgid " Timeout (ms)" -msgstr " タイムアウト(ミリ秒)" - -msgid "Behavior" -msgstr "動作" - -msgid "Method to show gestures" -msgstr "ジェスチャを表示する方法" - -msgid "Color" -msgstr "色" - -msgid "Width" -msgstr "幅" - -msgid "Show popups (" -msgstr "ポップアップを表示 (" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "トレイアイコンを表示" - -msgid "Show last gesture in tray" -msgstr "最後のジェスチャをトレイに表示" - -msgid "Autostart easystroke" -msgstr "Easystroke を自動起動" - -msgid "Appearance" -msgstr "外観" - -msgid "Exceptions" -msgstr "例外" - -msgid "_Add Exception" -msgstr "例外を追加(_A)" - -msgid "_Remove Exception" -msgstr "例外を削除(_R)" - -msgid "Preferences" -msgstr "設定" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "タイムアウト・ジェスチャ" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "高度ジェスチャに至ったストロークを無視" - -msgid "(See Documentation)" -msgstr "(説明を参照のこと)" - -msgid "Show popups on advanced gestures" -msgstr "高度ジェスチャ時にポップアップを表示" - -msgid "Show OSD" -msgstr "OSD を表示" - -msgid "Invert Scroll Direction" -msgstr "スクロール方向を反転" - -msgid "Scroll Speed" -msgstr "スクロール速度" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "ジェスチャー毎後にカーソルを元の位置に戻す" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "ペンが読取可能高さの範囲内にある限り「スクロール」や「無視」モードを保つ" - -msgid "Tablet Options" -msgstr "タブレット・オプション" - -msgid "Devices" -msgstr "デバイス" - -msgid "Advanced" -msgstr "高度設定" - -msgid "_Matrix" -msgstr "マトリクス(_M)" - -msgid "_History" -msgstr "履歴(_H)" - -msgid "Easystroke Gesture Recognition" -msgstr "Easystroke ジェスチャ認識" - -msgid "Control your desktop using mouse gestures" -msgstr "マウス・ジェスチャを使用してデスクトップを制御します" - -msgid "Enable" -msgstr "" - -msgid "Disable" -msgstr "" - -#~ msgid "Key combination..." -#~ msgstr "キーの組み合わせ..." - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "左手操作のために最適化 )" diff --git a/service/po/ko.po b/service/po/ko.po deleted file mode 100644 index fd06a693..00000000 --- a/service/po/ko.po +++ /dev/null @@ -1,461 +0,0 @@ -# Korean translation for easystroke -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2011. -# jincreator , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2011-01-15 01:54+0000\n" -"Last-Translator: Jinkyu Yi \n" -"Language-Team: Korean \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "오류: 명령 \"%s\"를 실행할 수 없습니다: fork() 실패\n" - -msgid "None" -msgstr "없음" - -msgid "Unminimize" -msgstr "최소화 안함" - -msgid "Show/Hide" -msgstr "보이기/숨기기" - -msgid "Disable (Enable)" -msgstr "비활성화(활성화)" - -msgid "Default" -msgstr "기본값" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "오류: %s 움직임 데이터베이스를 읽을 수 없습니다.\n" - -msgid "rename() failed" -msgstr "rename() 실패" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "오류: %s 움직임 데이터베이스를 저장할 수 없습니다.\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"%1을(를) 저장하지 못했습니다. 바뀐 점은 없어집니다. \"%2\"이(가) 쓰기 가능한 경로인지 확인하십시오. 명령행에서 -c 또는 --" -"config-dir 옵션을 통해 설정 경로를 바꿀 수 있습니다." - -msgid "actions" -msgstr "활동" - -msgid "Command" -msgstr "명령어" - -msgid "Key" -msgstr "키" - -msgid "Text" -msgstr "글자" - -msgid "Scroll" -msgstr "스크롤" - -msgid "Ignore" -msgstr "무시" - -msgid "Button" -msgstr "단추" - -msgid "Misc" -msgstr "기타" - -msgid "Stroke" -msgstr "선 그리기" - -msgid "Name" -msgstr "이름" - -msgid "Type" -msgstr "종류" - -msgid "Details" -msgstr "자세히" - -msgid "Application" -msgstr "프로그램" - -msgid "Actions" -msgstr "활동" - -msgid "Action \"%1\" is about to be deleted." -msgstr "활동 \"%1\"을(를) 삭제할 것입니다." - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "활동이 삭제됩니다." - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "활동 삭제" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 \"%2\" (%3 %4를 포함하는)을(를) 삭제할 것입니다." - -msgid "The application" -msgstr "프로그램" - -msgid "The group" -msgstr "모음" - -msgid "action" -msgid_plural "actions" -msgstr[0] "동작" - -msgid "Delete an Application" -msgstr "프로그램 삭제" - -msgid "Delete an Application Group" -msgstr "프로그램 모음 삭제" - -msgid "Group" -msgstr "" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "활동을 한번 클릭과 연결하려 합니다. 이는 나중에 %1 버튼을 사용하기 힘들게 합니다. 계속하시겠습니까?" - -msgid "Record a New Stroke" -msgstr "새 선 그리기를 녹음합니다." - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "다음 선 그리기는 \"%1\" 활동에 연결됩니다. 화면 아무곳에 그리세요(두 버튼 아래 제외)." - -msgid "Gesture %1" -msgstr "동작 %1" - -msgid "No Modifiers" -msgstr "고치기 없음" - -msgid "(Instantly) " -msgstr "(즉시) " - -msgid "(Click & Hold) " -msgstr "(클릭 유지) " - -msgid "Any Modifier" -msgstr "다른 수정" - -msgid "Button %1" -msgstr "버튼 %1" - -msgid " + Scroll" -msgstr " +스크롤" - -msgid "'composite' not available" -msgstr "'컴퍼지트' 사용 불가" - -#, c-format -msgid "Error: %s\n" -msgstr "오류: %s\n" - -msgid "Tray icon disabled" -msgstr "트레이 아이콘이 비활성화됨" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "설정 창을 다시 보려면 활동의 없음...보이기/숨기기 형식을 지정해야 합니다." - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "경고: 활동 \"%s\"가 정의되지 않음\n" - -msgid "Enabled" -msgstr "활성화" - -msgid "About" -msgstr "" - -msgid "Quit" -msgstr "" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "디스플레이를 열 수 없습니다.\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "오류: \"%s\" 설정 경로를 열 수 없습니다.\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "오류: \"%s\"은(는) 경로가 아닙니다.\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "오류: 환경설정:%s을 저장할 수 없습니다.\n" - -msgid "preferences" -msgstr "환경설정" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "오류: 환경설정을 읽을 수 없습니다.\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "시간제한 끔" - -msgid "Conservative" -msgstr "조심스러움" - -msgid "Medium" -msgstr "중간" - -msgid "Aggressive" -msgstr "적극적" - -msgid "Flick" -msgstr "경쾌함" - -msgid "Custom" -msgstr "사용자 지정" - -msgid "Application (WM__CLASS)" -msgstr "프로그램 (WM_CLASS)" - -msgid "Device" -msgstr "기기" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "시간제한 정책" - -msgid "" -msgstr "<프로그램 비활성화>" - -msgid "Select a Mouse or Pen Button" -msgstr "마우스나 펜 버튼을 선택하세요" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "박스 안으로 마우스나 펜을 가져가서 선택할 버튼을 누르십시오. 추가 변경자를 억제할 수도 있습니다." - -msgid "Score" -msgstr "점수" - -msgid "D_isabled" -msgstr "사용 안함(_I)" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "DBus 연결 실패" - -msgid "_Delete Current" -msgstr "현재 것 삭제(_D)" - -msgid "_Default" -msgstr "기본값(_D)" - -msgid "Timeout" -msgstr "시간제한" - -msgid "Instant Gestures" -msgstr "순간 동작" - -msgid "Click & Hold" -msgstr "누른채로 잡고있기" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "다른 변경자(_Y)" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "대신, 아래의 버튼과 변경자를 선택할 수 있습니다." - -msgid "Show deleted rows" -msgstr "삭제된 줄 보이기" - -msgid "Add Application" -msgstr "프로그램 추가" - -msgid "Remove Application/Group" -msgstr "프로그램/모음 지우기" - -msgid "Add Group" -msgstr "모음 추가" - -msgid "Reset Action(s)" -msgstr "활동 초기화" - -msgid "Applications" -msgstr "프로그램" - -msgid "_Record Stroke" -msgstr "선 그리기 기록(_R)" - -msgid "_Add Action" -msgstr "활동 추가(_A)" - -msgid "_Delete Action(s)" -msgstr "활동 삭제(_D)" - -msgid "_Hide" -msgstr "숨기기(_H)" - -msgid "_Gesture Button" -msgstr "동작 버튼(_G)" - -msgid "Additional Buttons" -msgstr "보조 버튼" - -msgid "Initial Timeout (ms)" -msgstr "초기 시간제한 (ms)" - -msgid " Timeout (ms)" -msgstr " 시간제한 (ms)" - -msgid "Behavior" -msgstr "동작" - -msgid "Method to show gestures" -msgstr "동작을 보여줄 방법" - -msgid "Color" -msgstr "색" - -msgid "Width" -msgstr "너비" - -msgid "Show popups (" -msgstr "팝업 보이기 (" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "트레이 아이콘 보이기" - -msgid "Show last gesture in tray" -msgstr "트레이에 마지막 동작 보이기" - -msgid "Autostart easystroke" -msgstr "이지스트로크 자동 실행" - -msgid "Appearance" -msgstr "모양새" - -msgid "Exceptions" -msgstr "예외" - -msgid "_Add Exception" -msgstr "예외 추가(_A)" - -msgid "_Remove Exception" -msgstr "예외 삭제(_R)" - -msgid "Preferences" -msgstr "환경설정" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "활동 시간제한" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "고급 동작에 따라 무시" - -msgid "(See Documentation)" -msgstr "(문서 참조)" - -msgid "Show popups on advanced gestures" -msgstr "고급 동작 시 팝업 보이기" - -msgid "Show OSD" -msgstr "OSD 보임" - -msgid "Invert Scroll Direction" -msgstr "스크롤 방향 뒤집기" - -msgid "Scroll Speed" -msgstr "스크롤 빠르기" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "동작 후 커서를 원래 위치로 돌려놓음" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "펜이 범위 안에 있는 동안 '스크롤'과 '무시' 상태 유지하기" - -msgid "Tablet Options" -msgstr "태블릿 선택" - -msgid "Devices" -msgstr "기기" - -msgid "Advanced" -msgstr "고급" - -msgid "_Matrix" -msgstr "표(_M)" - -msgid "_History" -msgstr "기록(_H)" - -msgid "Easystroke Gesture Recognition" -msgstr "이지스트로크 동작 인식" - -msgid "Control your desktop using mouse gestures" -msgstr "마우스 동작을 통해 데스크탑 제어" - -msgid "Enable" -msgstr "" - -msgid "Disable" -msgstr "" - -#~ msgid "Key combination..." -#~ msgstr "키 조합..." - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "오류: 잡기 실패. 다시 설정중...\n" - -#~ msgid "(window manager frame)" -#~ msgstr "(창 관리자 프레임)" - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "왼손잡이에 맞게 최적화 )" diff --git a/service/po/pl.po b/service/po/pl.po deleted file mode 100644 index 164a6b4d..00000000 --- a/service/po/pl.po +++ /dev/null @@ -1,478 +0,0 @@ -# Polish translation for easystroke -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2010-01-30 22:32+0000\n" -"Last-Translator: neo \n" -"Language-Team: Polish \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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "Błąd: nie potrafię wykonać komendy \"%s\": fork() failed\n" - -msgid "None" -msgstr "Żaden" - -msgid "Unminimize" -msgstr "Cofnij minimalizację" - -msgid "Show/Hide" -msgstr "Pokaż/ukryj" - -msgid "Disable (Enable)" -msgstr "Wyłącz (włącz)" - -msgid "Default" -msgstr "Domyślnie" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "Nie potrafię odczytać bazy danych: %s.\n" - -msgid "rename() failed" -msgstr "rename() zwróciło błąd" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "Nie potrafię zapisać do bazy danych: %s.\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"Nie mogę zapisać %1. Twoje zmiany zostaną utracone. Upewnij się, że \"%2\" " -"jest folderem i ma ustawione prawa dostępu. Możesz zmienić folder " -"konfiguracyjny używając opcji -c lub --config-dir z linii komend." - -msgid "actions" -msgstr "akcje" - -msgid "Command" -msgstr "Komenda" - -msgid "Key" -msgstr "Kombinacja klawiszy" - -msgid "Text" -msgstr "Tekst" - -msgid "Scroll" -msgstr "Przewijanie" - -msgid "Ignore" -msgstr "Pomiń" - -msgid "Button" -msgstr "Przycisk" - -msgid "Misc" -msgstr "Różne" - -msgid "Stroke" -msgstr "Gest" - -msgid "Name" -msgstr "Nazwa" - -msgid "Type" -msgstr "Typ" - -msgid "Details" -msgstr "Szczegóły" - -msgid "Application" -msgstr "Program" - -msgid "Actions" -msgstr "Akcje" - -msgid "Action \"%1\" is about to be deleted." -msgstr "Gest \"%1\" zostanie usunięty. Kontynuować?" - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "Na pewno chcesz usunąć %1 gest?" -msgstr[1] "Na pewno chcesz usunąć %1 gesty?" -msgstr[2] "Na pewno chcesz usunąć %1 gestów?" - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "Usuń gest." -msgstr[1] "Usuń gesty." -msgstr[2] "Usuń gesty." - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 \"%2\" (zawierający %3 %4) zostanie usunięty." - -msgid "The application" -msgstr "Program" - -msgid "The group" -msgstr "Grupa" - -msgid "action" -msgid_plural "actions" -msgstr[0] "gest" -msgstr[1] "gesty" -msgstr[2] "gestów" - -msgid "Delete an Application" -msgstr "Usuń program" - -msgid "Delete an Application Group" -msgstr "Usuń grupę programów" - -msgid "Group" -msgstr "Grupa" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"Akcja zostanie przypisana do pojedynczego przycisku myszy, co może sprawić " -"problemy z jego użyciem w przyszłości. Kontynuować?" - -msgid "Record a New Stroke" -msgstr "Zapisz nowy gest" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"Nowy gest zostanie przypisany akcji \"%1\". Możesz go narysować gdziekolwiek " -"na ekranie (poza dwoma przyciskami poniżej)." - -msgid "Gesture %1" -msgstr "Gest %1" - -msgid "No Modifiers" -msgstr "Brak dodatkowych klawiszy" - -msgid "(Instantly) " -msgstr "(Natychmiast) " - -msgid "(Click & Hold) " -msgstr "(Kliknij i przytrzymaj) " - -msgid "Any Modifier" -msgstr "Jakikolwiek dodatkowy klawisz" - -msgid "Button %1" -msgstr "Przycisk %1" - -msgid " + Scroll" -msgstr " + przewijanie" - -msgid "'composite' not available" -msgstr "'composite' niedostępny" - -#, c-format -msgid "Error: %s\n" -msgstr "Błąd: %s\n" - -msgid "Tray icon disabled" -msgstr "Ikonka systemowa wyłączona" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" -"Żeby wyświetlić z powrotem okienko konfiguracji powinieneś zdefiniować akcję " -"typu różne...pokaż/ukryj." - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "Ostrzeżenie: Akcja \"%s\" niezdefiniowana\n" - -msgid "Enabled" -msgstr "Włączony" - -msgid "About" -msgstr "" - -msgid "Quit" -msgstr "" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "Nie potrafię otrzymać dostępu do ekranu.\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "Błąd: nie potrafię stworzyć folderu konfiguracji \"%s\"\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "Błąd: \"%s\" nie jest folderem\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "Błąd: nie potrafię zapisać ustawień: %s\n" - -msgid "preferences" -msgstr "Właściwości" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "Błąd: Nie potrafię odczytać ustawień.\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "Przeyrwanie wyłączone" - -msgid "Conservative" -msgstr "Konserwatywne" - -msgid "Medium" -msgstr "Średnie" - -msgid "Aggressive" -msgstr "Agresywne" - -msgid "Flick" -msgstr "Natychmiastowo" - -msgid "Custom" -msgstr "Użytkownika" - -msgid "Application (WM__CLASS)" -msgstr "Aplikacja (WM__CLASS)" - -msgid "Device" -msgstr "Urządzenie" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "Szybkość anulowania gestów" - -msgid "" -msgstr "" - -msgid "Select a Mouse or Pen Button" -msgstr "Wybierz mysz lub Przycisk Rysika" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "" -"Najedź myszą lub rysikiem na pole poniżej i naciśnij wybrany przycisk. Może " -"również wcisnąć dodatkowe klawisze." - -msgid "Score" -msgstr "Wynik" - -msgid "D_isabled" -msgstr "W_yłącz" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "Połączenie z DBus nie udało się" - -msgid "_Delete Current" -msgstr "_Usuń bieżący" - -msgid "_Default" -msgstr "_Domyślne" - -msgid "Timeout" -msgstr "Przekroczony limit czasu" - -msgid "Instant Gestures" -msgstr "Natychmiastowe gesty" - -msgid "Click & Hold" -msgstr "Kliknij i przytrzymaj" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "Do_wolny Klawisz Dodatkowy" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "Możesz też wybrać przycisk i inne klawisze poniżej." - -msgid "Show deleted rows" -msgstr "Pokaż usunięte wiersze" - -msgid "Add Application" -msgstr "Dodaj program" - -msgid "Remove Application/Group" -msgstr "Usuń Program/Grupę" - -msgid "Add Group" -msgstr "Dodaj grupę" - -msgid "Reset Action(s)" -msgstr "Zresetuj gesty" - -msgid "Applications" -msgstr "Programy" - -msgid "_Record Stroke" -msgstr "_Zarejestruj gest" - -msgid "_Add Action" -msgstr "_Dodaj gest" - -msgid "_Delete Action(s)" -msgstr "_Usuń gest" - -msgid "_Hide" -msgstr "_Ukryj" - -msgid "_Gesture Button" -msgstr "_Klawisz gestów" - -msgid "Additional Buttons" -msgstr "Dodatkowe guziki" - -msgid "Initial Timeout (ms)" -msgstr "Anulowanie gestów po czasie (ms)" - -msgid " Timeout (ms)" -msgstr " Anulowanie po bezczynności" - -msgid "Behavior" -msgstr "Zachowanie" - -msgid "Method to show gestures" -msgstr "Metoda rysowania gestów" - -msgid "Color" -msgstr "Kolor" - -msgid "Width" -msgstr "Szerokość" - -msgid "Show popups (" -msgstr "Pokazuj wyskakujące okienka (" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "Pokaż ikonę w obszarze powiadamiania" - -msgid "Show last gesture in tray" -msgstr "Pokaż ostatni gest w obszarze powiadamiania" - -msgid "Autostart easystroke" -msgstr "Automatycznie uruchamiaj easystroke" - -msgid "Appearance" -msgstr "Wygląd" - -msgid "Exceptions" -msgstr "Wyjątki" - -msgid "_Add Exception" -msgstr "_Dodaj wyjątek" - -msgid "_Remove Exception" -msgstr "_Usuń wyjątek" - -msgid "Preferences" -msgstr "Ustawienia" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "Anuluj gesty po przekroczeniu limitu czasu" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "Pomijaj gesty, które uruchamiają gesty zaawansowane" - -msgid "(See Documentation)" -msgstr "(Patrz dokumentacja)" - -msgid "Show popups on advanced gestures" -msgstr "Pokazuj wyskakujące okienka przy zaawansowanych gestach" - -msgid "Show OSD" -msgstr "Pokaż OSD" - -msgid "Invert Scroll Direction" -msgstr "Odwróć kierunek przewijania" - -msgid "Scroll Speed" -msgstr "Prędkość Przewijania" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "" -"Pozostań w trybie \"przewijanie\" i \"ignorowanie\" tak długo jak długo " -"pisak jest w zasięgu" - -msgid "Tablet Options" -msgstr "Opcje tabletu" - -msgid "Devices" -msgstr "Urządzenia" - -msgid "Advanced" -msgstr "Zaawansowane" - -msgid "_Matrix" -msgstr "_Tablica" - -msgid "_History" -msgstr "_Historia" - -msgid "Easystroke Gesture Recognition" -msgstr "Easystroke Rozpoznawanie Gestów" - -msgid "Control your desktop using mouse gestures" -msgstr "Kontroluj pulpit używając gestów myszy" - -msgid "Enable" -msgstr "" - -msgid "Disable" -msgstr "" - -#~ msgid "Key combination..." -#~ msgstr "Kombinacja klawiszy..." - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "Błąd: Pobranie zawiodło. Resetuję...\n" - -#~ msgid "(window manager frame)" -#~ msgstr "(menedżer ramki okienka)" - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "zoptymalizuj dla ludzi leworęcznych )" diff --git a/service/po/ru.po b/service/po/ru.po deleted file mode 100644 index ded89a57..00000000 --- a/service/po/ru.po +++ /dev/null @@ -1,479 +0,0 @@ -# Russian translation for easystroke -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2012-12-25 06:20+0000\n" -"Last-Translator: Eugene Marshal \n" -"Language-Team: Russian \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-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "Ошибка! Не могу выполнить команду \"%s\": форк() не удался.\n" - -msgid "None" -msgstr "Отсутствует" - -msgid "Unminimize" -msgstr "Восстановить" - -msgid "Show/Hide" -msgstr "Показать или скрыть" - -msgid "Disable (Enable)" -msgstr "Отключить (включить)" - -msgid "Default" -msgstr "Значение по умолчанию" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "Ошибка! Не могу прочитать базу данных действий: %s.\n" - -msgid "rename() failed" -msgstr "переименование() прошло неудачно" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "Ошибка! Не могу сохранить базу данных действий: %s.\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"Не могу сохранить %1. Внесенные вами изменения будут утеряны. Убедитесь, что " -"\"%2\" является каталогом и у вас достаточно прав для записи в него. " -"Изменить конфигурационный каталог можно с помощью опций командной строки -c " -"или --config-dir." - -msgid "actions" -msgstr "действия" - -msgid "Command" -msgstr "Команда" - -msgid "Key" -msgstr "Клавиша" - -msgid "Text" -msgstr "Текст" - -msgid "Scroll" -msgstr "Прокрутка" - -msgid "Ignore" -msgstr "Игнорировать" - -msgid "Button" -msgstr "Кнопка" - -msgid "Misc" -msgstr "Разное" - -msgid "Stroke" -msgstr "Жест" - -msgid "Name" -msgstr "Название" - -msgid "Type" -msgstr "Тип" - -msgid "Details" -msgstr "Подробности" - -msgid "Application" -msgstr "Приложение" - -msgid "Actions" -msgstr "Действия" - -msgid "Action \"%1\" is about to be deleted." -msgstr "Действие \"%1\" будет удалено." - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "Одно действие будет удалено." -msgstr[1] "Действия %1 будут удалены." -msgstr[2] "Действия %1 будут удалены." - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "Удалить действие" -msgstr[1] "Удалить действия" -msgstr[2] "Удалить действия" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 \"%2\" (содержащее %3 %4) сейчас будет удалено." - -msgid "The application" -msgstr "Приложение" - -msgid "The group" -msgstr "Группа" - -msgid "action" -msgid_plural "actions" -msgstr[0] "действие" -msgstr[1] "действия" -msgstr[2] "действия" - -msgid "Delete an Application" -msgstr "Удалить приложение" - -msgid "Delete an Application Group" -msgstr "Удалить группу приложений" - -msgid "Group" -msgstr "Группа" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"Вы собираетесь привязать действие к одиночному щелчку. В будущем это может " -"вызвать затруднения с использованием кнопки %1. Точно продолжить?" - -msgid "Record a New Stroke" -msgstr "Записать новый жест" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"Следующий жест будет ассоциирован с действием \"%1\". Нарисуйте его в любом " -"месте экрана (исключая две нижеследующие кнопки)." - -msgid "Gesture %1" -msgstr "Жест %1" - -msgid "No Modifiers" -msgstr "Без модификаторов" - -msgid "(Instantly) " -msgstr "(Мгновенно) " - -msgid "(Click & Hold) " -msgstr "(Щелчок и удержание) " - -msgid "Any Modifier" -msgstr "Любой модификатор" - -msgid "Button %1" -msgstr "Кнопка %1" - -msgid " + Scroll" -msgstr " + Прокрутка" - -msgid "'composite' not available" -msgstr "«композит» не доступен" - -#, c-format -msgid "Error: %s\n" -msgstr "Ошибка: %s\n" - -msgid "Tray icon disabled" -msgstr "Иконка в области уведомлений отключена" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" -"Для вызова диалога конфигурации вы должны определить действие " -"«Разное…Показать/скрыть»." - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "Внимание: действие \"%s\" не определено\n" - -msgid "Enabled" -msgstr "Включено" - -msgid "About" -msgstr "Сведения о программе" - -msgid "Quit" -msgstr "Выйти" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "Не могу открыть дисплей.\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "Ошибка: не смог создать конфигурационный каталог \"%s\"\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "Ошибка: \"%s\" не является каталогом\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "Ошибка! Не смог сохранить параметры настройки: \"%s\".\n" - -msgid "preferences" -msgstr "Настройка" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "Ошибка: не смог прочитать параметры настройки.\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "Тайм-аут вытключен" - -msgid "Conservative" -msgstr "Умеренный" - -msgid "Medium" -msgstr "Средний" - -msgid "Aggressive" -msgstr "Агрессивный" - -msgid "Flick" -msgstr "Рывком" - -msgid "Custom" -msgstr "Пользовательский" - -msgid "Application (WM__CLASS)" -msgstr "Приложение (WM__CLASS)" - -msgid "Device" -msgstr "Устройство" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "Настройка задержки" - -msgid "" -msgstr "<Прил. отключено>" - -msgid "Select a Mouse or Pen Button" -msgstr "Выберите кнопку мыши или пера" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "" -"Поместите мышь или перо в область ниже и нажмите желаемую кнопку. Можно " -"удерживать дополнительные модификаторы." - -msgid "Score" -msgstr "Точность" - -msgid "D_isabled" -msgstr "О_тключено" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "Подключиться к D-Bus не удалось" - -msgid "_Delete Current" -msgstr "_Удалить текущее" - -msgid "_Default" -msgstr "_По умолчанию" - -msgid "Timeout" -msgstr "Задержка" - -msgid "Instant Gestures" -msgstr "Мгновенные жесты" - -msgid "Click & Hold" -msgstr "Нажать и удерживать" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "Л_юбой модификатор" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "Иначе, вы должны выбрать кнопку и модификаторы ниже." - -msgid "Show deleted rows" -msgstr "Показывать удаленные строки" - -msgid "Add Application" -msgstr "Добавить приложение" - -msgid "Remove Application/Group" -msgstr "Удалить приложение/группу" - -msgid "Add Group" -msgstr "Добавить группу" - -msgid "Reset Action(s)" -msgstr "Сбросить действие(я)" - -msgid "Applications" -msgstr "Приложения" - -msgid "_Record Stroke" -msgstr "_Записать жест" - -msgid "_Add Action" -msgstr "_Добавить действие" - -msgid "_Delete Action(s)" -msgstr "_Удалить действие(я)" - -msgid "_Hide" -msgstr "_Скрыть" - -msgid "_Gesture Button" -msgstr "_Кнопка жеста" - -msgid "Additional Buttons" -msgstr "Дополнительные кнопки" - -msgid "Initial Timeout (ms)" -msgstr "Начальная задержка (мс)" - -msgid " Timeout (ms)" -msgstr " Время до отключения (мс)" - -msgid "Behavior" -msgstr "Поведение" - -msgid "Method to show gestures" -msgstr "Метод показа жестов" - -msgid "Color" -msgstr "Цвет" - -msgid "Width" -msgstr "Ширина" - -msgid "Show popups (" -msgstr "Показывать всплывающие окна (" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "Показывать иконку в области уведомлений" - -msgid "Show last gesture in tray" -msgstr "Показывать последний жест в трее" - -msgid "Autostart easystroke" -msgstr "Автоматически запускать Easystroke" - -msgid "Appearance" -msgstr "Появление" - -msgid "Exceptions" -msgstr "Исключения" - -msgid "_Add Exception" -msgstr "_Добавить исключение" - -msgid "_Remove Exception" -msgstr "_Удалить исключение" - -msgid "Preferences" -msgstr "Настройка" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "Жесты с задержкой" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "Игнорировать движения, приводящие к расширенным жестам" - -msgid "(See Documentation)" -msgstr "(см. документацию)" - -msgid "Show popups on advanced gestures" -msgstr "Показывать всплывающие окна для расширенных жестов" - -msgid "Show OSD" -msgstr "Показывать OSD" - -msgid "Invert Scroll Direction" -msgstr "Обратить направление прокрутки" - -msgid "Scroll Speed" -msgstr "Скорость прокрутки" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "Возвращать курсор в исходное положение после каждого жеста" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "" -"Пребывать в режиме прокрутки или игнора до тех пор, пока перо находится в " -"диапазоне" - -msgid "Tablet Options" -msgstr "Настройка планшета" - -msgid "Devices" -msgstr "Устройства" - -msgid "Advanced" -msgstr "Расширенные" - -msgid "_Matrix" -msgstr "_Матрица" - -msgid "_History" -msgstr "_История" - -msgid "Easystroke Gesture Recognition" -msgstr "Распознавание жестов мыши Easystroke" - -msgid "Control your desktop using mouse gestures" -msgstr "Управление рабочим столом с помощью жестов мыши" - -msgid "Enable" -msgstr "Включить" - -msgid "Disable" -msgstr "Отключить" - -#~ msgid "Key combination..." -#~ msgstr "Комбинация клавиш..." - -#~ msgid "(window manager frame)" -#~ msgstr "(рамка оконного менеджера)" - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "Ошибка: захватить не удалось. Возврат в исходное положение...\n" - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "оптимизировать для леворучных операций )" diff --git a/service/po/vi.po b/service/po/vi.po deleted file mode 100644 index 1cc2809d..00000000 --- a/service/po/vi.po +++ /dev/null @@ -1,470 +0,0 @@ -# Vietnamese translation for easystroke -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2010-09-04 14:46+0000\n" -"Last-Translator: Van Diep Duong \n" -"Language-Team: Vietnamese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "Lỗi: \"%s\" không thể thực hiện\n" - -msgid "None" -msgstr "Không chọn" - -msgid "Unminimize" -msgstr "Phóng to" - -msgid "Show/Hide" -msgstr "Hiện/Ẩn" - -msgid "Disable (Enable)" -msgstr "Tắt (Bật)" - -msgid "Default" -msgstr "Mặc định" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "Lỗi: Không thể đọc cơ sở dữ liệu thao tác: %s\n" - -msgid "rename() failed" -msgstr "Đổi tên() thất bại" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "Lỗi: Không thể lưu cơ sở dữ liệu thao tác: %s\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"Không thể lưu được 1%. Thay đổi của bạn sẽ bị mất. Hãy chắc chắn rằng \"%2\" " -"là một thư mục và bạn đã viết truy cập vào nó. Bạn có thể thay đổi thư mục " -"cấu hình bằng cách sử dụng các tùy chọn dòng lệnh -c hay --config-dir." - -msgid "actions" -msgstr "thao tác" - -msgid "Command" -msgstr "Câu lệnh" - -msgid "Key" -msgstr "Phím" - -msgid "Text" -msgstr "Văn bản" - -msgid "Scroll" -msgstr "Cuộn" - -msgid "Ignore" -msgstr "Bỏ qua" - -msgid "Button" -msgstr "Nút bấm" - -msgid "Misc" -msgstr "Lặt vặt" - -msgid "Stroke" -msgstr "Nét vẽ" - -msgid "Name" -msgstr "Tên" - -msgid "Type" -msgstr "Kiểu" - -msgid "Details" -msgstr "Chi tiết" - -msgid "Application" -msgstr "Ứng dụng" - -msgid "Actions" -msgstr "Thao tác" - -msgid "Action \"%1\" is about to be deleted." -msgstr "Thao tác \"%1\" sắp được xóa" - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "Một thao tác sắp được xóa" - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "Xóa một thao tác" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 \"%2\" (bao gồm %3 %4) sắp được xóa" - -msgid "The application" -msgstr "Ứng dụng" - -msgid "The group" -msgstr "Nhóm" - -msgid "action" -msgid_plural "actions" -msgstr[0] "Thao tác" - -msgid "Delete an Application" -msgstr "Xóa một ứng dụng" - -msgid "Delete an Application Group" -msgstr "Xóa một nhóm ứng dụng" - -msgid "Group" -msgstr "Nhóm" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "" -"Bạn sắp chấp nhận một thao tác cho một nhấp chuột duy nhất. Điều này có thể " -"làm cho nó khó sử dụng Nút 1% trong tương lai. Bạn có chắc bạn muốn tiếp tục " -"không?" - -msgid "Record a New Stroke" -msgstr "Ghi lại một nét vẽ mới" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "" -"Nét vẽ tiếp theo sẽ được kết hợp với thao tác \"%1\". Bạn có thể vẽ nó bất " -"kỳ vị trí nào trên màn hình (ngoại trừ hai nút dưới đây)" - -msgid "Gesture %1" -msgstr "Cử chỉ %1" - -msgid "No Modifiers" -msgstr "Không bổ trợ" - -msgid "(Instantly) " -msgstr "(Ngay lập tức) " - -msgid "(Click & Hold) " -msgstr "(Nhắp & Giữ) " - -msgid "Any Modifier" -msgstr "Tùy ý" - -msgid "Button %1" -msgstr "Nút %1" - -msgid " + Scroll" -msgstr " +Cuộn" - -msgid "'composite' not available" -msgstr "'kết hợp' không có sẵn" - -#, c-format -msgid "Error: %s\n" -msgstr "Lỗi: %s\n" - -msgid "Tray icon disabled" -msgstr "Tắt biểu tượng trên khay hệ thống" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "" -"Để đem lại hộp thoại cấu hình lên một lần nữa, bạn nên xác định một hành " -"động của loại Lặt vặt...Hiện/Ẩn." - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "Cảnh báo: Thao tác \"%s\" không xác định\n" - -msgid "Enabled" -msgstr "Bật" - -msgid "About" -msgstr "" - -msgid "Quit" -msgstr "" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "Không thể mở sự hiển thị.\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "Lỗi: Không thể tạo thư mục cấu hình \"%s\"\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "Lỗi: \"%s\" không là một đường dẫn\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "Lỗi: Không thể lưu các tùy chọn: %s.\n" - -msgid "preferences" -msgstr "tuỳ chọn" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "Lỗi: Không thể đọc các tùy chọn\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "Tắt" - -msgid "Conservative" -msgstr "Vừa phải" - -msgid "Medium" -msgstr "Trung bình" - -msgid "Aggressive" -msgstr "Năng nổ" - -msgid "Flick" -msgstr "Vút nhẹ" - -msgid "Custom" -msgstr "Tuỳ chọn" - -msgid "Application (WM__CLASS)" -msgstr "Ứng dụng (WM_CLASS)" - -msgid "Device" -msgstr "Thiết bị" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "Mô tả timeout" - -msgid "" -msgstr "" - -msgid "Select a Mouse or Pen Button" -msgstr "Chọn nút bấm chuột hoặc bút" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "" -"Xin hãy đặt bút hay chuột của bạn vào hộp dưới đây và bấm vào nút mà bạn " -"muốn chọn. Bạn cũng có thể giữ thêm phím bổ trợ." - -msgid "Score" -msgstr "Thành công" - -msgid "D_isabled" -msgstr "Tắ_t" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "Kết nối với DBUS thất bại" - -msgid "_Delete Current" -msgstr "_Xóa sự hiện hành" - -msgid "_Default" -msgstr "_Mặc định" - -msgid "Timeout" -msgstr "Timeout" - -msgid "Instant Gestures" -msgstr "Cử chỉ tức thời" - -msgid "Click & Hold" -msgstr "Nhắp & Giữ" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "Tùy ý" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "Ngoài ra, bạn có thể chọn nút bấm và nút bổ trợ dưới đây." - -msgid "Show deleted rows" -msgstr "Hiện hàng đã xóa" - -msgid "Add Application" -msgstr "Thêm ứng dụng" - -msgid "Remove Application/Group" -msgstr "Hủy bỏ Ứng dụng/Nhóm" - -msgid "Add Group" -msgstr "Thêm nhóm" - -msgid "Reset Action(s)" -msgstr "Thiết lập lại thao tác" - -msgid "Applications" -msgstr "Ứng dụng" - -msgid "_Record Stroke" -msgstr "_Ghi nét vẽ" - -msgid "_Add Action" -msgstr "_Thêm thao tác" - -msgid "_Delete Action(s)" -msgstr "_Xóa thao tác" - -msgid "_Hide" -msgstr "Ẩ_n" - -msgid "_Gesture Button" -msgstr "_Nút bấm" - -msgid "Additional Buttons" -msgstr "Thêm nút bấm" - -msgid "Initial Timeout (ms)" -msgstr "Thời gian trễ ban đầu (ms)" - -msgid " Timeout (ms)" -msgstr " Timeout (ms)" - -msgid "Behavior" -msgstr "Chế độ" - -msgid "Method to show gestures" -msgstr "Cách thể hiện cử chỉ" - -msgid "Color" -msgstr "Màu" - -msgid "Width" -msgstr "Độ rộng" - -msgid "Show popups (" -msgstr "Hiển thị popup" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "Hiện biểu tượng trên khay" - -msgid "Show last gesture in tray" -msgstr "Hiện cử chỉ mới nhất trong khay" - -msgid "Autostart easystroke" -msgstr "Easystroke tự khởi động" - -msgid "Appearance" -msgstr "Diện mạo" - -msgid "Exceptions" -msgstr "Ngoại lệ" - -msgid "_Add Exception" -msgstr "_Thêm ngoại lệ" - -msgid "_Remove Exception" -msgstr "_Xóa ngoại trừ" - -msgid "Preferences" -msgstr "Tùy chỉnh" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "Timeout Gestures" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "Bỏ qua các nét vẽ dẫn đến cử chỉ cao cấp" - -msgid "(See Documentation)" -msgstr "(Xem tài liệu)" - -msgid "Show popups on advanced gestures" -msgstr "Hiển thì popup trong các cử chỉ nâng cao" - -msgid "Show OSD" -msgstr "Hiện OSD" - -msgid "Invert Scroll Direction" -msgstr "Đảo ngược hướng cuộn" - -msgid "Scroll Speed" -msgstr "Tốc độ cuộn" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "Di chuyển con trỏ trở lại vị trí ban đầu sau mỗi cử chỉ" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "Trong chế độ 'cuộn' và 'bỏ qua' miễn là bút vẽ ở trong phạm vi" - -msgid "Tablet Options" -msgstr "Tùy chọn Tablet PC" - -msgid "Devices" -msgstr "Thiết bị" - -msgid "Advanced" -msgstr "Nâng cao" - -msgid "_Matrix" -msgstr "_Bảng" - -msgid "_History" -msgstr "_Lược sử" - -msgid "Easystroke Gesture Recognition" -msgstr "Trình nhận dạng hành vi Easystroke" - -msgid "Control your desktop using mouse gestures" -msgstr "Điều khiển máy tính bằng những hành vi của chuột" - -msgid "Enable" -msgstr "" - -msgid "Disable" -msgstr "" - -#~ msgid "Key combination..." -#~ msgstr "Phím kết hợp..." - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "Lỗi: Lấy A thất bại. Làm lại ...\n" - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "tối ưu cho hoạt động thuận tay trái)" - -#~ msgid "(window manager frame)" -#~ msgstr "Quản lý cửa sổ khung" diff --git a/service/po/zh_CN.po b/service/po/zh_CN.po deleted file mode 100644 index e0c31f8a..00000000 --- a/service/po/zh_CN.po +++ /dev/null @@ -1,460 +0,0 @@ -# Simplified Chinese translation for easystroke -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2011-04-27 16:53+0000\n" -"Last-Translator: snowdream \n" -"Language-Team: Simplified Chinese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "错误:\"%s\"不能被执行\n" - -msgid "None" -msgstr "无" - -msgid "Unminimize" -msgstr "恢复窗口" - -msgid "Show/Hide" -msgstr "显示/隐藏" - -msgid "Disable (Enable)" -msgstr "禁用(启用)" - -msgid "Default" -msgstr "默认" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "错误:不能读取此操作的数据:%s\n" - -msgid "rename() failed" -msgstr "重命名失败" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "错误:不能保存此操作的数据:%s\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"无法保存%1。你当前所作的设置将会丢失。请确认\"%2\"是一个目录,并且你对这个目录具有写入权限。你可以通过命令行参数-c或--config-" -"dir改变配置文件所在目录。" - -msgid "actions" -msgstr "鼠标手势" - -msgid "Command" -msgstr "运行命令" - -msgid "Key" -msgstr "按键" - -msgid "Text" -msgstr "文本" - -msgid "Scroll" -msgstr "滚动" - -msgid "Ignore" -msgstr "忽略" - -msgid "Button" -msgstr "鼠标点击" - -msgid "Misc" -msgstr "其他" - -msgid "Stroke" -msgstr "手势" - -msgid "Name" -msgstr "名称" - -msgid "Type" -msgstr "类別" - -msgid "Details" -msgstr "详细信息" - -msgid "Application" -msgstr "应用" - -msgid "Actions" -msgstr "动作" - -msgid "Action \"%1\" is about to be deleted." -msgstr "鼠标手势\"%1\"将被删除" - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "该动作将被删除" - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "删除手势" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 \"%2\" (包括 %3 %4) 将被删除。" - -msgid "The application" -msgstr "应用程序" - -msgid "The group" -msgstr "程序组" - -msgid "action" -msgid_plural "actions" -msgstr[0] "动作" - -msgid "Delete an Application" -msgstr "删除针对此应用程序的动作" - -msgid "Delete an Application Group" -msgstr "删除此应用程序组" - -msgid "Group" -msgstr "组" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "你将要绑定某动作到一次鼠标单击上,这样可能导致鼠标按键%1变得难以使用。你确定要这样做吗?" - -msgid "Record a New Stroke" -msgstr "记录新手势" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "接下来的鼠标手势将会作为动作\"%1\"的手势。你可以在屏幕上的任意地方绘画你的鼠标手势(除了以下的两个按钮)" - -msgid "Gesture %1" -msgstr "手势 %1" - -msgid "No Modifiers" -msgstr "无组合键" - -msgid "(Instantly) " -msgstr "立即 " - -msgid "(Click & Hold) " -msgstr "点击并保持按下 " - -msgid "Any Modifier" -msgstr "任意修饰符" - -msgid "Button %1" -msgstr "按键 %1" - -msgid " + Scroll" -msgstr " + 滚动" - -msgid "'composite' not available" -msgstr "组合扩展('composite')暂时不可用" - -#, c-format -msgid "Error: %s\n" -msgstr "错误: %s\n" - -msgid "Tray icon disabled" -msgstr "托盘图标被禁止使用" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "要重新显示配置界面,你必须给“其他”选项中的“显示/隐藏“定义一个操作" - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "警告:\"%s\"操作没有被定义\n" - -msgid "Enabled" -msgstr "启用" - -msgid "About" -msgstr "" - -msgid "Quit" -msgstr "" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "X windows不能打开显示\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "错误:不能创建配置目录 \"%s\"\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "错误:\"%s\"不是有效的路径\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "错误:不能保存偏好设置: %s。\n" - -msgid "preferences" -msgstr "偏好" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "错误:读取参数失败\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "超时关闭" - -msgid "Conservative" -msgstr "保持" - -msgid "Medium" -msgstr "中速" - -msgid "Aggressive" -msgstr "激进的" - -msgid "Flick" -msgstr "交换" - -msgid "Custom" -msgstr "定制" - -msgid "Application (WM__CLASS)" -msgstr "应用程序 (窗口类 WM_CLASS)" - -msgid "Device" -msgstr "设备" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "超时档案" - -msgid "" -msgstr "应用程序被关闭" - -msgid "Select a Mouse or Pen Button" -msgstr "选择一个鼠标或手写笔按键" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "请把你的鼠标或触控笔放在以下的方框中,并按下你所需的按钮。你也可以同时按下更多的修饰键。" - -msgid "Score" -msgstr "相似度" - -msgid "D_isabled" -msgstr "D_isabled" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "连接至DBus失败" - -msgid "_Delete Current" -msgstr "删除当前设定值" - -msgid "_Default" -msgstr "默认" - -msgid "Timeout" -msgstr "超时" - -msgid "Instant Gestures" -msgstr "鼠标手势" - -msgid "Click & Hold" -msgstr "单击并按住" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "任意修饰符" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "或者你也可以选择以下的按键和修饰符" - -msgid "Show deleted rows" -msgstr "显示删除行" - -msgid "Add Application" -msgstr "添加应用程序" - -msgid "Remove Application/Group" -msgstr "移除程序或程序组" - -msgid "Add Group" -msgstr "添加应用程序组" - -msgid "Reset Action(s)" -msgstr "恢复动作" - -msgid "Applications" -msgstr "应用程序" - -msgid "_Record Stroke" -msgstr "已记录的手势(_R)" - -msgid "_Add Action" -msgstr "添加动作" - -msgid "_Delete Action(s)" -msgstr "删除动作" - -msgid "_Hide" -msgstr "隐藏(_H)" - -msgid "_Gesture Button" -msgstr "手势按钮(_G)" - -msgid "Additional Buttons" -msgstr "额外按键" - -msgid "Initial Timeout (ms)" -msgstr "初始的超时值(ms)" - -msgid " Timeout (ms)" -msgstr " 超时 (ms)" - -msgid "Behavior" -msgstr "行为" - -msgid "Method to show gestures" -msgstr "显示鼠标手势的方式" - -msgid "Color" -msgstr "颜色" - -msgid "Width" -msgstr "宽度" - -msgid "Show popups (" -msgstr "显示气球信息" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "显示托盘图标" - -msgid "Show last gesture in tray" -msgstr "在托盘栏显示上一个触发的鼠标手势" - -msgid "Autostart easystroke" -msgstr "自动启动easystroke" - -msgid "Appearance" -msgstr "外观" - -msgid "Exceptions" -msgstr "例外" - -msgid "_Add Exception" -msgstr "添加例外" - -msgid "_Remove Exception" -msgstr "删除例外" - -msgid "Preferences" -msgstr "偏好设置" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "鼠标手势超时" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "忽略会触发高级动作的鼠标手势" - -msgid "(See Documentation)" -msgstr "查看帮助文档" - -msgid "Show popups on advanced gestures" -msgstr "显示高级手势的气球信息" - -msgid "Show OSD" -msgstr "显示OSD" - -msgid "Invert Scroll Direction" -msgstr "相反的滚动方向" - -msgid "Scroll Speed" -msgstr "滚动速度" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "每次作出手势后将光标移回至原来位置" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "只要触控笔在指定范围内即保持滚动和忽略模式" - -msgid "Tablet Options" -msgstr "平板电脑选项" - -msgid "Devices" -msgstr "设备" - -msgid "Advanced" -msgstr "高级" - -msgid "_Matrix" -msgstr "_Matrix" - -msgid "_History" -msgstr "历史(_H)" - -msgid "Easystroke Gesture Recognition" -msgstr "Easystroke 鼠标手势辨认" - -msgid "Control your desktop using mouse gestures" -msgstr "通过鼠标手势控制你的桌面" - -msgid "Enable" -msgstr "" - -msgid "Disable" -msgstr "" - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "错误:抓取失败,请重新设置...\n" - -#~ msgid "Key combination..." -#~ msgstr "组合键..." - -#~ msgid "(window manager frame)" -#~ msgstr "窗口管理器帧" - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "为左手操作进行的优化" diff --git a/service/po/zh_TW.po b/service/po/zh_TW.po deleted file mode 100644 index 7733290f..00000000 --- a/service/po/zh_TW.po +++ /dev/null @@ -1,459 +0,0 @@ -# Chinese (Traditional) translation for easystroke -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the easystroke package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: easystroke\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-14 00:24-0400\n" -"PO-Revision-Date: 2010-08-31 15:44+0000\n" -"Last-Translator: 于 \n" -"Language-Team: Chinese (Traditional) \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2013-03-14 04:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#, c-format -msgid "Error: can't execute command \"%s\": fork() failed\n" -msgstr "錯誤:無法執行命令\"%s\"\n" - -msgid "None" -msgstr "無" - -msgid "Unminimize" -msgstr "恢復最小化" - -msgid "Show/Hide" -msgstr "顯示/隱藏" - -msgid "Disable (Enable)" -msgstr "禁用(啟用)" - -msgid "Default" -msgstr "預設" - -#, c-format -msgid "Error: Couldn't read action database: %s.\n" -msgstr "無法讀取此動作的資料庫:%s\n" - -msgid "rename() failed" -msgstr "重新命名失敗" - -#, c-format -msgid "Error: Couldn't save action database: %s.\n" -msgstr "錯誤:無法儲存此動作的資料庫:%s\n" - -msgid "" -"Couldn't save %1. Your changes will be lost. Make sure that \"%2\" is a " -"directory and that you have write access to it. You can change the " -"configuration directory using the -c or --config-dir command line options." -msgstr "" -"無法儲存%1。您所作的變更將遺失。請確認\"%2\"是一個目錄且您有寫入的權限。您可以使用命令行參數 -c 或 --config-dir 更改設定檔目錄" - -msgid "actions" -msgstr "滑鼠手勢" - -msgid "Command" -msgstr "指令" - -msgid "Key" -msgstr "鍵盤" - -msgid "Text" -msgstr "文本" - -msgid "Scroll" -msgstr "捲動" - -msgid "Ignore" -msgstr "忽略" - -msgid "Button" -msgstr "滑鼠" - -msgid "Misc" -msgstr "其他" - -msgid "Stroke" -msgstr "描繪手勢" - -msgid "Name" -msgstr "名稱" - -msgid "Type" -msgstr "類型" - -msgid "Details" -msgstr "詳細資訊" - -msgid "Application" -msgstr "應用程式" - -msgid "Actions" -msgstr "動作" - -msgid "Action \"%1\" is about to be deleted." -msgstr "滑鼠手勢\"%1\"將被刪除" - -msgid "One action is about to be deleted." -msgid_plural "%1 actions are about to be deleted" -msgstr[0] "該滑鼠手勢將被刪除" - -msgid "Delete an Action" -msgid_plural "Delete Actions" -msgstr[0] "刪除滑鼠手勢" - -msgid "%1 \"%2\" (containing %3 %4) is about to be deleted." -msgstr "%1 \"%2\" (包含 %3 %4)將被刪除" - -msgid "The application" -msgstr "應用程式" - -msgid "The group" -msgstr "群組" - -msgid "action" -msgid_plural "actions" -msgstr[0] "動作" - -msgid "Delete an Application" -msgstr "刪除應用程式" - -msgid "Delete an Application Group" -msgstr "刪除應用程式群組" - -msgid "Group" -msgstr "群組" - -msgid "" -"You are about to bind an action to a single click. This might make it " -"difficult to use Button %1 in the future. Are you sure you want to continue?" -msgstr "您將指定一個手勢動作給滑鼠單點。這將會導致滑鼠按鈕%1變得難以使用。您確定要繼續?" - -msgid "Record a New Stroke" -msgstr "記錄新的滑鼠手勢" - -msgid "" -"The next stroke will be associated with the action \"%1\". You can draw it " -"anywhere on the screen (except for the two buttons below)." -msgstr "接下來的手勢將指定給動作\"%1\"。你可以在螢幕任一地方使用滑鼠手勢(除了底下的兩個按鈕之外)" - -msgid "Gesture %1" -msgstr "手勢 %1" - -msgid "No Modifiers" -msgstr "無組合鍵" - -msgid "(Instantly) " -msgstr "(立即) " - -msgid "(Click & Hold) " -msgstr "(按住不放) " - -msgid "Any Modifier" -msgstr "任一組合鍵" - -msgid "Button %1" -msgstr "按鈕 %1" - -msgid " + Scroll" -msgstr " + 滑動" - -msgid "'composite' not available" -msgstr "組件(composite)無法使用" - -#, c-format -msgid "Error: %s\n" -msgstr "錯誤:%s\n" - -msgid "Tray icon disabled" -msgstr "系統列圖示已禁用" - -msgid "" -"To bring the configuration dialog up again, you should define an action of " -"type Misc...Show/Hide." -msgstr "要重新顯示設定對話視窗,您必須為\"其它…顯示/隱藏\"定義一個操作" - -#, c-format -msgid "Warning: No action \"%s\" defined\n" -msgstr "警告:\"%s\"動作未被定義\n" - -msgid "Enabled" -msgstr "啟用" - -msgid "About" -msgstr "" - -msgid "Quit" -msgstr "" - -#, c-format -msgid "Couldn't open display.\n" -msgstr "無法啟用顯示\n" - -#, c-format -msgid "Error: Couldn't create configuration directory \"%s\"\n" -msgstr "無法建立設定檔目錄\"%s\"\n" - -#, c-format -msgid "Error: \"%s\" is not a directory\n" -msgstr "錯誤:\"%s\" 不是目錄\n" - -#, c-format -msgid "Error: Couldn't save preferences: %s.\n" -msgstr "錯誤:無法儲存偏好設定:%s\n" - -msgid "preferences" -msgstr "偏好設定" - -#, c-format -msgid "Error: Couldn't read preferences.\n" -msgstr "錯誤:無法讀取偏好設定\n" - -msgid "XShape" -msgstr "XShape" - -msgid "Timeout Off" -msgstr "關閉" - -msgid "Conservative" -msgstr "緩慢" - -msgid "Medium" -msgstr "適中" - -msgid "Aggressive" -msgstr "迅捷" - -msgid "Flick" -msgstr "瞬間" - -msgid "Custom" -msgstr "自訂" - -msgid "Application (WM__CLASS)" -msgstr "應用程式(WM__CLASS)" - -msgid "Device" -msgstr "裝置" - -msgid "" -msgstr "" - -msgid "Timeout profile" -msgstr "逾時設定" - -msgid "" -msgstr "應用程式已關閉" - -msgid "Select a Mouse or Pen Button" -msgstr "選擇滑鼠或手寫筆按鈕" - -msgid "" -"Please place your mouse or pen in the box below and press the button that " -"you want to select. You can also hold down additional modifiers." -msgstr "請移動您的滑鼠或觸控筆至下面方框,並按下要使用的按鈕。您也可同時按下額外的組合鍵" - -msgid "Score" -msgstr "相似度" - -msgid "D_isabled" -msgstr "禁用(_i)" - -msgid "" -msgstr "" - -msgid "Connection to DBus failed" -msgstr "連接至DBus失敗" - -msgid "_Delete Current" -msgstr "刪除目前設定(_D)" - -msgid "_Default" -msgstr "預設(_D)" - -msgid "Timeout" -msgstr "逾時" - -msgid "Instant Gestures" -msgstr "滑鼠手勢" - -msgid "Click & Hold" -msgstr "按住不放" - -msgid "_Control" -msgstr "_Control" - -msgid "_Shift" -msgstr "_Shift" - -msgid "_Alt" -msgstr "_Alt" - -msgid "S_uper" -msgstr "S_uper" - -msgid "An_y Modifier" -msgstr "任意組合鍵" - -msgid "Alternatively, you may select button and modifiers below." -msgstr "或者你也可以選擇以下的按鈕和組合鍵" - -msgid "Show deleted rows" -msgstr "顯示刪除行" - -msgid "Add Application" -msgstr "加入應用程式" - -msgid "Remove Application/Group" -msgstr "移除應用程式/群組" - -msgid "Add Group" -msgstr "新增群組" - -msgid "Reset Action(s)" -msgstr "重設操作" - -msgid "Applications" -msgstr "應用程式" - -msgid "_Record Stroke" -msgstr "記錄手勢(_R)" - -msgid "_Add Action" -msgstr "增加動作(_A)" - -msgid "_Delete Action(s)" -msgstr "刪除動作(_D)" - -msgid "_Hide" -msgstr "隱藏(_H)" - -msgid "_Gesture Button" -msgstr "滑鼠手勢按鈕(_G)" - -msgid "Additional Buttons" -msgstr "額外按鈕" - -msgid "Initial Timeout (ms)" -msgstr "初始逾時值(毫秒)" - -msgid " Timeout (ms)" -msgstr " 逾時(毫秒)" - -msgid "Behavior" -msgstr "行為" - -msgid "Method to show gestures" -msgstr "顯示手勢的方式" - -msgid "Color" -msgstr "顏色" - -msgid "Width" -msgstr "寬度" - -msgid "Show popups (" -msgstr "顯示手勢的描繪" - -msgid "to the right of the cursor)" -msgstr "" - -msgid "Show tray icon" -msgstr "顯示系統列圖示" - -msgid "Show last gesture in tray" -msgstr "在系統列顯示上次的滑鼠手勢" - -msgid "Autostart easystroke" -msgstr "自動啟動easystroke" - -msgid "Appearance" -msgstr "外觀" - -msgid "Exceptions" -msgstr "例外" - -msgid "_Add Exception" -msgstr "增加例外(_A)" - -msgid "_Remove Exception" -msgstr "移除例外(_R)" - -msgid "Preferences" -msgstr "偏好設定" - -msgid "Only enable easystroke for applications listed on 'Actions' tab" -msgstr "" - -msgid "Timeout Gestures" -msgstr "滑鼠手勢逾時" - -msgid "Ignore strokes leading up to advanced gestures" -msgstr "忽略會觸發進階操作的滑鼠手勢" - -msgid "(See Documentation)" -msgstr "(檢視說明文件)" - -msgid "Show popups on advanced gestures" -msgstr "顯示進階手勢的描繪" - -msgid "Show OSD" -msgstr "顯示 OSD" - -msgid "Invert Scroll Direction" -msgstr "顛倒滑動方向" - -msgid "Scroll Speed" -msgstr "滑動速度" - -msgid "Move the cursor back to the original position after each gesture" -msgstr "劃出手勢後,滑鼠回到原來位置" - -msgid "Stay in 'scroll' and 'ignore' mode as long as the pen is within range" -msgstr "當觸控筆在指定範圍內,則保持滑動與忽略模式" - -msgid "Tablet Options" -msgstr "平版電腦選項" - -msgid "Devices" -msgstr "裝置" - -msgid "Advanced" -msgstr "進階" - -msgid "_Matrix" -msgstr "矩陣(_M)" - -msgid "_History" -msgstr "歷史(_H)" - -msgid "Easystroke Gesture Recognition" -msgstr "Easystroke 滑鼠手勢辨識" - -msgid "Control your desktop using mouse gestures" -msgstr "使用滑鼠手勢控制您的桌面" - -msgid "Enable" -msgstr "" - -msgid "Disable" -msgstr "" - -#, c-format -#~ msgid "Error: A grab failed. Resetting...\n" -#~ msgstr "錯誤:擷取失敗。重新設定…\n" - -#~ msgid "Key combination..." -#~ msgstr "按鍵組合…" - -#~ msgid "optimize for left-handed operation )" -#~ msgstr "慣用左手操作" - -#~ msgid "(window manager frame)" -#~ msgstr "(視窗邊框管理)" diff --git a/service/prefdb.cc b/service/prefdb.cc index d3f3e7cb..d07fddf0 100644 --- a/service/prefdb.cc +++ b/service/prefdb.cc @@ -49,7 +49,6 @@ PrefDB::PrefDB() : scroll_invert(true), scroll_speed(2.0), tray_feedback(false), - show_osd(true), move_back(false), whitelist(false) {} @@ -124,7 +123,6 @@ template void PrefDB::serialize(Archive & ar, const unsigned int ar & scroll_invert.unsafe_ref(); ar & scroll_speed.unsafe_ref(); ar & tray_feedback.unsafe_ref(); - ar & show_osd.unsafe_ref(); if (version < 16) return; ar & move_back.unsafe_ref(); if (version < 17) return; diff --git a/service/prefdb.h b/service/prefdb.h index d854bdfc..abb18dbf 100644 --- a/service/prefdb.h +++ b/service/prefdb.h @@ -128,7 +128,6 @@ class PrefDB : public TimeoutWatcher { PrefSource scroll_invert; PrefSource scroll_speed; PrefSource tray_feedback; - PrefSource show_osd; PrefSource move_back; PrefSource > device_timeout; PrefSource whitelist; diff --git a/service/prefs.cc b/service/prefs.cc index 5f5bbb31..0057fc79 100644 --- a/service/prefs.cc +++ b/service/prefs.cc @@ -261,8 +261,6 @@ Prefs::Prefs() { new Check(prefs.move_back, "check_move_back"); - new Check(prefs.show_osd, "check_osd"); - Gtk::Button *bbutton, *add_exception, *remove_exception, *add_extra, *edit_extra, *remove_extra; widgets->get_widget("button_add_exception", add_exception); widgets->get_widget("button_button", bbutton); diff --git a/service/stats.cc b/service/stats.cc index 97c894d3..2647dd4e 100644 --- a/service/stats.cc +++ b/service/stats.cc @@ -26,8 +26,6 @@ Stats::Stats() { widgets->get_widget("treeview_recent", recent_view); widgets->get_widget("treeview_ranking", ranking_view); - button_matrix->signal_clicked().connect(sigc::mem_fun(*this, &Stats::on_pdf)); - recent_store = Gtk::ListStore::create(cols); recent_view->set_model(recent_store); recent_view->append_column(_("Stroke"), cols.stroke); @@ -230,58 +228,3 @@ bool Stats::on_stroke(RRanking r) { } return false; } - -void Stats::on_pdf() { - struct timeval tv1, tv2; - if (verbosity >= 1) - gettimeofday(&tv1, 0); - const int S = 32; - const int B = 1; - std::list strokes; - actions.get_root()->all_strokes(strokes); - const int n = strokes.size(); - Cairo::RefPtr surface = Cairo::PdfSurface::create("/tmp/strokes.pdf", (n+1)*S, (n+1)*S); - const Cairo::RefPtr ctx = Cairo::Context::create(surface); - int k = 1; - for (std::list::iterator i = strokes.begin(); i != strokes.end(); i++, k++) { - (*i)->draw(surface, k*S+B, B, S-2*B, S-2*B); - (*i)->draw(surface, B, k*S+B, S-2*B, S-2*B); - - ctx->set_source_rgba(0,0,0,1); - ctx->set_line_width(1); - ctx->move_to(k*S, B); - ctx->line_to(k*S, (n+1)*S-B); - ctx->move_to(B, k*S); - ctx->line_to((n+1)*S-B, k*S); - ctx->stroke(); - - int l = 1; - for (std::list::iterator j = strokes.begin(); j != strokes.end(); j++, l++) { - double score; - int match = Stroke::compare(*i, *j, score); - if (match < 0) - continue; - if (match) { - ctx->save(); - ctx->set_source_rgba(0,0,1,score-0.6); - ctx->rectangle(l*S, k*S, S, S); - ctx->fill(); - ctx->restore(); - } - Glib::ustring str = format_float(score); - Cairo::TextExtents te; - ctx->get_text_extents(str, te); - ctx->move_to(l*S+S/2 - te.x_bearing - te.width/2, k*S+S/2 - te.y_bearing - te.height/2); - ctx->show_text(str); - } - } - if (verbosity >= 1) { - gettimeofday(&tv2, 0); - printf("creating table took %ld us\n", (tv2.tv_sec - tv1.tv_sec)*1000000 + tv2.tv_usec - tv1.tv_usec); - } - if (!fork()) { - execlp("xdg-open", "xdg-open", "/tmp/strokes.pdf", nullptr); - exit(EXIT_FAILURE); - } -} - From b000fcb5b4ad73c5eea9e163c4a047f4e24bbb3e Mon Sep 17 00:00:00 2001 From: "berkeleybross@gmail.com" Date: Mon, 28 Dec 2020 15:50:56 +0000 Subject: [PATCH 12/69] Removed prefs screen --- build/run-local.sh | 4 +- service/handler.cc | 3 +- service/prefs.cc | 626 +++++++++------------------------------------ service/prefs.h | 59 ----- service/win.cc | 3 +- service/win.h | 6 +- 6 files changed, 133 insertions(+), 568 deletions(-) diff --git a/build/run-local.sh b/build/run-local.sh index de44496f..20796fdd 100755 --- a/build/run-local.sh +++ b/build/run-local.sh @@ -7,5 +7,7 @@ set -e make clean make -j2 + + Write-Host "Starting..." ./easy-gesture -) \ No newline at end of file +) diff --git a/service/handler.cc b/service/handler.cc index 9e62c0db..e55c204c 100644 --- a/service/handler.cc +++ b/service/handler.cc @@ -295,8 +295,7 @@ void XState::handle_xi2_event(XIDeviceEvent *event) { handle_raw_motion((XIRawEvent *)event); break; case XI_HierarchyChanged: - if (grabber->hierarchy_changed((XIHierarchyEvent *)event)) - win->prefs_tab->update_device_list(); + grabber->hierarchy_changed((XIHierarchyEvent *)event); } } diff --git a/service/prefs.cc b/service/prefs.cc index 0057fc79..54541195 100644 --- a/service/prefs.cc +++ b/service/prefs.cc @@ -174,517 +174,143 @@ const Combo::Info timeout_info_exp[] = { { TimeoutDefault, 0 } }; -Source autostart_ok(true); - -class Autostart : public IO, private Base { - bool a; - std::string filename; -public: - Autostart() { - std::string dir = getenv("HOME"); - dir += "/.config/autostart"; - filename = dir + "/easystroke.desktop"; - - if (!is_dir(dir) && mkdir(dir.c_str(), 0777)) { - autostart_ok.set(false); - return; - } - a = is_file(filename); - } - virtual void set(const bool a_) { - a = a_; - notify(); - } - virtual bool get() const { return a; } - virtual void notify() { - if (a) { - char path[256] = "easystroke"; - readlink("/proc/self/exe", path, sizeof(path)); - - FILE *file = fopen(filename.c_str(), "w"); - if (!file || fprintf(file, desktop_file, path) == -1) - autostart_ok.set(false); - if (file) - fclose(file); - } else { - if (remove(filename.c_str()) == -1) - autostart_ok.set(false); - } - update(); - } -}; - -Autostart autostart; - -void remove_last_entry(const Glib::ustring & name) { - Gtk::ComboBox *combo; - widgets->get_widget(name, combo); - Glib::RefPtr combo_model = Glib::RefPtr::cast_dynamic(combo->get_model()); - Gtk::TreeIter i = combo_model->children().end(); - combo_model->erase(--i); -} - -static void on_prefs_editing_started(GtkCellRenderer *, GtkCellEditable *editable, const gchar *path, gpointer data) { - ((Prefs *)data)->on_button_editing_started(editable, path); -} - -Prefs::Prefs() { - new Check(prefs.advanced_ignore, "check_advanced_ignore"); - - new Check(prefs.proximity, "check_proximity"); - - new Check(prefs.feedback, "check_feedback"); - new Check(prefs.left_handed, "check_left_handed"); - new Sensitive(prefs.feedback, "check_left_handed"); - new Check(prefs.advanced_popups, "check_advanced_popups"); - new Sensitive(prefs.feedback, "check_advanced_popups"); - - new Check(prefs.tray_icon, "check_tray_icon"); - new Sensitive(prefs.tray_icon, "check_tray_feedback"); - new Check(prefs.tray_feedback, "check_tray_feedback"); - - new Check(autostart, "check_autostart"); - new Sensitive(autostart_ok, "check_autostart"); - - new Adjustment(prefs.init_timeout, "adjustment_init_timeout"); - new Adjustment(prefs.final_timeout, "adjustment_final_timeout"); - - new Color(prefs.color, "button_color"); - new Adjustment(prefs.trace_width, "adjustment_trace_width"); - new Combo(prefs.timeout_profile, "box_timeout", experimental ? timeout_info_exp : timeout_info); - - new Check(prefs.whitelist, "check_whitelist"); - new Check(prefs.timeout_gestures, "check_timeout_gestures"); - - new Check(prefs.scroll_invert, "check_scroll_invert"); - new Adjustment(prefs.scroll_speed, "adjustment_scroll_speed"); - - new Check(prefs.move_back, "check_move_back"); - - Gtk::Button *bbutton, *add_exception, *remove_exception, *add_extra, *edit_extra, *remove_extra; - widgets->get_widget("button_add_exception", add_exception); - widgets->get_widget("button_button", bbutton); - widgets->get_widget("button_remove_exception", remove_exception); - widgets->get_widget("label_button", blabel); - widgets->get_widget("button_add_extra", add_extra); - widgets->get_widget("button_edit_extra", edit_extra); - widgets->get_widget("button_remove_extra", remove_extra); - widgets->get_widget("treeview_exceptions", tv); - widgets->get_widget("treeview_devices", dtv); - widgets->get_widget("treeview_extra", etv); - widgets->get_widget("frame_tablet", frame_tablet); - - new Sensitive(*fun(&is_custom, prefs.timeout_profile), "hbox_timeout"); - - tm = Gtk::ListStore::create(cols); - tv->set_model(tm); - tv->append_column(_("Application (WM__CLASS)"), cols.user_app); - tm->set_sort_column(cols.user_app, Gtk::SORT_ASCENDING); - - CellRendererTextish *button_renderer = cell_renderer_textish_new (); - button_renderer->mode = CELL_RENDERER_TEXTISH_MODE_Popup; - GtkTreeViewColumn *col_button = gtk_tree_view_column_new_with_attributes(_("Button"), GTK_CELL_RENDERER (button_renderer), "text", cols.button.index(), nullptr); - gtk_tree_view_append_column(tv->gobj(), col_button); - g_object_set(button_renderer, "editable", true, nullptr); - g_signal_connect(button_renderer, "editing-started", G_CALLBACK(on_prefs_editing_started), this); - - bbutton->signal_clicked().connect(sigc::mem_fun(*this, &Prefs::on_select_button)); - - add_exception->signal_clicked().connect(sigc::mem_fun(*this, &Prefs::on_add)); - remove_exception->signal_clicked().connect(sigc::mem_fun(*this, &Prefs::on_remove)); - - dtm = Gtk::ListStore::create(dcs); - dtv->set_model(dtm); - dtv->append_column_editable(_("Enabled"), dcs.enabled); - int n = dtv->append_column(_("Device"), dcs.name); - Gtk::TreeView::Column *col_device = dtv->get_column(n-1); - col_device->set_expand(); - - Glib::RefPtr timeout_model = Gtk::ListStore::create(timeout_columns); - { - Gtk::TreeModel::Row row = *(timeout_model->append()); - row[timeout_columns.name] = _(""); - } - for (const Combo::Info *i = timeout_info; i->name; i++) { - Gtk::TreeModel::Row row = *(timeout_model->append()); - row[timeout_columns.name] = i->name; - } - - Gtk::CellRendererCombo *timeout_renderer = Gtk::manage(new Gtk::CellRendererCombo); - timeout_renderer->property_model() = timeout_model; - timeout_renderer->property_editable() = true; - timeout_renderer->property_text_column() = 0; - timeout_renderer->property_has_entry() = false; - timeout_renderer->signal_edited().connect(sigc::mem_fun(*this, &Prefs::on_device_timeout_changed)); - n = dtv->append_column(_("Timeout profile"), *timeout_renderer); - Gtk::TreeView::Column *col_timeout = dtv->get_column(n-1); - col_timeout->add_attribute(timeout_renderer->property_text(), dcs.timeout); - - dtm->signal_row_changed().connect(sigc::mem_fun(*this, &Prefs::on_device_toggled)); - update_device_list(); - - add_extra->signal_clicked().connect(sigc::mem_fun(*this, &Prefs::on_add_extra)); - edit_extra->signal_clicked().connect(sigc::mem_fun(*this, &Prefs::on_edit_extra)); - remove_extra->signal_clicked().connect(sigc::mem_fun(*this, &Prefs::on_remove_extra)); - - etm = Gtk::ListStore::create(ecs); - etv->set_model(etm); - etv->append_column(_("Button"), ecs.str); - update_extra_buttons(); - - if (!experimental) { - Gtk::HBox *hbox; - widgets->get_widget("hbox_timeout", hbox); - hbox->hide(); - } - - set_button_label(); - - const std::map &exceptions = prefs.exceptions.ref(); - for (std::map::const_iterator i = exceptions.begin(); i!=exceptions.end(); i++) { - Gtk::TreeModel::Row row = *(tm->append()); - row[cols.app] = i->first; - row[cols.user_app] = app_name_hr(i->first); - row[cols.button] = i->second ? i->second->get_button_text() : _(""); - } -} - -void Prefs::update_device_list() { - bool proximity = false; - ignore_device_toggled = true; - dtm->clear(); - std::set names; - for (Grabber::DeviceMap::iterator i = grabber->xi_devs.begin(); i != grabber->xi_devs.end(); ++i) { - if (i->second->proximity_axis >= 0) - proximity = true; - std::string name = i->second->name; - if (names.count(name)) - continue; - names.insert(name); - Gtk::TreeModel::Row row = *(dtm->append()); - row[dcs.enabled] = !prefs.excluded_devices.get().count(name); - row[dcs.name] = name; - row[dcs.timeout] = _(""); - - const std::map &dt = prefs.device_timeout.ref(); - std::map::const_iterator j = dt.find(name); - if (j != dt.end()) - for (const Combo::Info *i = timeout_info; i->name; i++) - if (j->second == i->value) - row[dcs.timeout] = i->name; - } - ignore_device_toggled = false; - frame_tablet->set_visible(proximity); -} - -void Prefs::update_extra_buttons() { - etm->clear(); - std::vector &extra = prefs.extra_buttons.unsafe_ref(); - for (std::vector::iterator i = extra.begin(); i != extra.end(); i++) { - Gtk::TreeModel::Row row = *(etm->append()); - row[ecs.str] = i->get_button_text(); - row[ecs.i] = i; - } -} - -void Prefs::on_add_extra() { - ButtonInfo bi; - SelectButton sb(bi, true, true); - if (!sb.run()) - return; - Atomic a; - std::vector &extra = prefs.extra_buttons.write_ref(a); - for (std::vector::iterator i = extra.begin(); i != extra.end();) - if (i->overlap(sb.event)) - i = extra.erase(i); - else - i++; - extra.push_back(sb.event); - stable_sort(extra.begin(), extra.end()); - update_extra_buttons(); -} - -void Prefs::on_edit_extra() { - Gtk::TreePath path; - Gtk::TreeViewColumn *col; - etv->get_cursor(path, col); - if (!path.gobj()) - return; - if (path.empty()) - return; - Gtk::TreeIter iter = *etm->get_iter(path); - std::vector::iterator i = (*iter)[ecs.i]; - SelectButton sb(*i, true, true); - if (!sb.run()) - return; - Atomic a; - std::vector &extra = prefs.extra_buttons.write_ref(a); - for (std::vector::iterator j = extra.begin(); j != extra.end();) - if (j != i && j->overlap(sb.event)) - j = extra.erase(j); - else - j++; - *i = sb.event; - update_extra_buttons(); -} - -void Prefs::on_remove_extra() { - Gtk::TreePath path; - Gtk::TreeViewColumn *col; - etv->get_cursor(path, col); - if (!path.gobj()) - return; - if (path.empty()) - return; - Gtk::TreeIter iter = *etm->get_iter(path); - Atomic a; - std::vector::iterator i = (*iter)[ecs.i]; - prefs.extra_buttons.write_ref(a).erase(i); - update_extra_buttons(); -} - SelectButton::SelectButton(ButtonInfo bi, bool def, bool any) { - widgets->get_widget("dialog_select", dialog); - dialog->set_message(_("Select a Mouse or Pen Button")); - dialog->set_secondary_text(_("Please place your mouse or pen in the box below and press the button that you want to select. You can also hold down additional modifiers.")); - widgets->get_widget("eventbox", eventbox); - widgets->get_widget("toggle_shift", toggle_shift); - widgets->get_widget("toggle_alt", toggle_alt); - widgets->get_widget("toggle_control", toggle_control); - widgets->get_widget("toggle_super", toggle_super); - widgets->get_widget("toggle_any", toggle_any); - widgets->get_widget("radio_timeout_default", radio_timeout_default); - widgets->get_widget("radio_instant", radio_instant); - widgets->get_widget("radio_click_hold", radio_click_hold); - Gtk::Bin *box_button; - widgets->get_widget("box_button", box_button); - Gtk::HBox *hbox_button_timeout; - widgets->get_widget("hbox_button_timeout", hbox_button_timeout); - select_button = dynamic_cast(box_button->get_child()); - if (!select_button) { - select_button = Gtk::manage(new Gtk::ComboBoxText); - box_button->add(*select_button); - for (int i = 1; i <= 12; i++) - select_button->append(Glib::ustring::compose(_("Button %1"), i)); - select_button->show(); - } - select_button->set_active(bi.button-1); - toggle_shift->set_active(bi.button && (bi.state & GDK_SHIFT_MASK)); - toggle_control->set_active(bi.button && (bi.state & GDK_CONTROL_MASK)); - toggle_alt->set_active(bi.button && (bi.state & GDK_MOD1_MASK)); - toggle_super->set_active(bi.button && (bi.state & GDK_SUPER_MASK)); - toggle_any->set_active(any && bi.button && bi.state == AnyModifier); - if (any) { - hbox_button_timeout->show(); - toggle_any->show(); - } else { - hbox_button_timeout->hide(); - toggle_any->hide(); - } - if (bi.instant) - radio_instant->set_active(); - else if (bi.click_hold) - radio_click_hold->set_active(); - else - radio_timeout_default->set_active(); - - Gtk::Button *select_default; - widgets->get_widget("select_default", select_default); - if (def) - select_default->show(); - else - select_default->hide(); - - if (!eventbox->get_children().size()) { - eventbox->set_events(Gdk::BUTTON_PRESS_MASK); - - Glib::RefPtr pb = Gdk::Pixbuf::create(Gdk::COLORSPACE_RGB,true,8,400,200); - pb->fill(0x808080ff); - WIDGET(Gtk::Image, box, pb); - eventbox->add(box); - box.show(); - } - handler[0] = eventbox->signal_button_press_event().connect(sigc::mem_fun(*this, &SelectButton::on_button_press)); - handler[1] = toggle_any->signal_toggled().connect(sigc::mem_fun(*this, &SelectButton::on_any_toggled)); - on_any_toggled(); + widgets->get_widget("dialog_select", dialog); + dialog->set_message(_("Select a Mouse or Pen Button")); + dialog->set_secondary_text(_("Please place your mouse or pen in the box below and press the button that you want to select. You can also hold down additional modifiers.")); + widgets->get_widget("eventbox", eventbox); + widgets->get_widget("toggle_shift", toggle_shift); + widgets->get_widget("toggle_alt", toggle_alt); + widgets->get_widget("toggle_control", toggle_control); + widgets->get_widget("toggle_super", toggle_super); + widgets->get_widget("toggle_any", toggle_any); + widgets->get_widget("radio_timeout_default", radio_timeout_default); + widgets->get_widget("radio_instant", radio_instant); + widgets->get_widget("radio_click_hold", radio_click_hold); + Gtk::Bin *box_button; + widgets->get_widget("box_button", box_button); + Gtk::HBox *hbox_button_timeout; + widgets->get_widget("hbox_button_timeout", hbox_button_timeout); + select_button = dynamic_cast(box_button->get_child()); + if (!select_button) { + select_button = Gtk::manage(new Gtk::ComboBoxText); + box_button->add(*select_button); + for (int i = 1; i <= 12; i++) + select_button->append(Glib::ustring::compose(_("Button %1"), i)); + select_button->show(); + } + select_button->set_active(bi.button-1); + toggle_shift->set_active(bi.button && (bi.state & GDK_SHIFT_MASK)); + toggle_control->set_active(bi.button && (bi.state & GDK_CONTROL_MASK)); + toggle_alt->set_active(bi.button && (bi.state & GDK_MOD1_MASK)); + toggle_super->set_active(bi.button && (bi.state & GDK_SUPER_MASK)); + toggle_any->set_active(any && bi.button && bi.state == AnyModifier); + if (any) { + hbox_button_timeout->show(); + toggle_any->show(); + } else { + hbox_button_timeout->hide(); + toggle_any->hide(); + } + if (bi.instant) + radio_instant->set_active(); + else if (bi.click_hold) + radio_click_hold->set_active(); + else + radio_timeout_default->set_active(); + + Gtk::Button *select_default; + widgets->get_widget("select_default", select_default); + if (def) + select_default->show(); + else + select_default->hide(); + + if (!eventbox->get_children().size()) { + eventbox->set_events(Gdk::BUTTON_PRESS_MASK); + + Glib::RefPtr pb = Gdk::Pixbuf::create(Gdk::COLORSPACE_RGB,true,8,400,200); + pb->fill(0x808080ff); + WIDGET(Gtk::Image, box, pb); + eventbox->add(box); + box.show(); + } + handler[0] = eventbox->signal_button_press_event().connect(sigc::mem_fun(*this, &SelectButton::on_button_press)); + handler[1] = toggle_any->signal_toggled().connect(sigc::mem_fun(*this, &SelectButton::on_any_toggled)); + on_any_toggled(); } SelectButton::~SelectButton() { - handler[0].disconnect(); - handler[1].disconnect(); + handler[0].disconnect(); + handler[1].disconnect(); } bool SelectButton::run() { - grabber->queue_suspend(); - dialog->show(); - Gtk::Button *select_ok; - widgets->get_widget("select_ok", select_ok); - select_ok->grab_focus(); - int response; - do { - response = dialog->run(); - } while (!response); - dialog->hide(); - grabber->queue_resume(); - switch (response) { - case 1: // Okay - event.button = select_button->get_active_row_number() + 1; - if (!event.button) - return false; - event.state = 0; - if (toggle_any->get_active()) { - event.state = AnyModifier; - return true; - } - if (toggle_shift->get_active()) - event.state |= GDK_SHIFT_MASK; - if (toggle_control->get_active()) - event.state |= GDK_CONTROL_MASK; - if (toggle_alt->get_active()) - event.state |= GDK_MOD1_MASK; - if (toggle_super->get_active()) - event.state |= GDK_SUPER_MASK; - event.instant = radio_instant->get_active(); - event.click_hold = radio_click_hold->get_active(); - return true; - case 2: // Default - event.button = 0; - event.state = 0; - event.instant = false; - return true; - case 3: // Click - all the work has already been done - return true; - case -1: // Cancel - default: // Something went wrong - return false; - } + grabber->queue_suspend(); + dialog->show(); + Gtk::Button *select_ok; + widgets->get_widget("select_ok", select_ok); + select_ok->grab_focus(); + int response; + do { + response = dialog->run(); + } while (!response); + dialog->hide(); + grabber->queue_resume(); + switch (response) { + case 1: // Okay + event.button = select_button->get_active_row_number() + 1; + if (!event.button) + return false; + event.state = 0; + if (toggle_any->get_active()) { + event.state = AnyModifier; + return true; + } + if (toggle_shift->get_active()) + event.state |= GDK_SHIFT_MASK; + if (toggle_control->get_active()) + event.state |= GDK_CONTROL_MASK; + if (toggle_alt->get_active()) + event.state |= GDK_MOD1_MASK; + if (toggle_super->get_active()) + event.state |= GDK_SUPER_MASK; + event.instant = radio_instant->get_active(); + event.click_hold = radio_click_hold->get_active(); + return true; + case 2: // Default + event.button = 0; + event.state = 0; + event.instant = false; + return true; + case 3: // Click - all the work has already been done + return true; + case -1: // Cancel + default: // Something went wrong + return false; + } } bool SelectButton::on_button_press(GdkEventButton *ev) { - event.button = ev->button; - event.state = ev->state; - event.instant = radio_instant->get_active(); - event.click_hold = radio_click_hold->get_active(); - if (toggle_any->get_active()) { - event.state = AnyModifier; - } else { - if (event.state & Mod4Mask) - event.state |= GDK_SUPER_MASK; - event.state &= gtk_accelerator_get_default_mod_mask(); - } - dialog->response(3); - return true; + event.button = ev->button; + event.state = ev->state; + event.instant = radio_instant->get_active(); + event.click_hold = radio_click_hold->get_active(); + if (toggle_any->get_active()) { + event.state = AnyModifier; + } else { + if (event.state & Mod4Mask) + event.state |= GDK_SUPER_MASK; + event.state &= gtk_accelerator_get_default_mod_mask(); + } + dialog->response(3); + return true; } void SelectButton::on_any_toggled() { - bool any = toggle_any->get_active(); - toggle_shift->set_sensitive(!any); - toggle_control->set_sensitive(!any); - toggle_alt->set_sensitive(!any); - toggle_super->set_sensitive(!any); -} - -void Prefs::on_select_button() { - Atomic a; - ButtonInfo &bi = prefs.button.write_ref(a); - SelectButton sb(bi, true, true); - if (!sb.run()) - return; - bi = sb.event.button ? sb.event : default_button; - set_button_label(); -} - -bool Prefs::select_row(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter, std::string name) { - if ((std::string)(*iter)[cols.app] == name) { - tv->set_cursor(path); - return true; - } - return false; -} - -void Prefs::on_add() { - std::string str = grabber->select_window(); - bool is_new; - { - Atomic a; - is_new = prefs.exceptions.write_ref(a).insert( - std::pair(str, RButtonInfo())).second; - } - if (is_new) { - Gtk::TreeModel::Row row = *(tm->append()); - row[cols.app] = str; - row[cols.user_app] = app_name_hr(str); - row[cols.button] = _(""); - Gtk::TreePath path = tm->get_path(row); - tv->set_cursor(path); - } else { - tm->foreach(sigc::bind(sigc::mem_fun(*this, &Prefs::select_row), str)); - } -} - -void Prefs::on_button_editing_started(GtkCellEditable* editable, const gchar *path) { - Gtk::TreeRow row(*tm->get_iter(path)); - std::string app = row[cols.app]; - ButtonInfo bi; - bi.button = 0; - bi.state = 0; - std::map::const_iterator i = prefs.exceptions.ref().find(app); - if (i != prefs.exceptions.ref().end() && i->second) - bi = *i->second; - SelectButton sb(bi, true, true); - if (!sb.run()) - return; - RButtonInfo bi2; - if (sb.event.button) - bi2.reset(new ButtonInfo(sb.event)); - row[cols.button] = bi2 ? bi2->get_button_text() : _(""); - Atomic a; - prefs.exceptions.write_ref(a)[app] = bi2; -} - - -void Prefs::on_remove() { - Gtk::TreePath path; - Gtk::TreeViewColumn *col; - tv->get_cursor(path, col); - if (path.gobj() != 0) { - Gtk::TreeIter iter = *tm->get_iter(path); - Atomic a; - prefs.exceptions.write_ref(a).erase((Glib::ustring)((*iter)[cols.app])); - tm->erase(iter); - } -} - -void Prefs::on_device_toggled(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter) { - if (ignore_device_toggled) - return; - Atomic a; - std::set &ex = prefs.excluded_devices.write_ref(a); - Glib::ustring device = (*iter)[dcs.name]; - if ((*iter)[dcs.enabled]) - ex.erase(device); - else - ex.insert(device); -} - -void Prefs::on_device_timeout_changed(const Glib::ustring& path, const Glib::ustring& new_text) { - Gtk::TreeRow row(*dtm->get_iter(path)); - row[dcs.timeout] = new_text; - Glib::ustring device = row[dcs.name]; - Atomic a; - - for (const Combo::Info *i = timeout_info; i->name; i++) { - if (Glib::ustring(i->name) == new_text) { - std::map &dt = prefs.device_timeout.write_ref(a); - dt[device] = i->value; - return; - } - } - - std::map &dt = prefs.device_timeout.write_ref(a); - dt.erase(device); -} - -void Prefs::set_button_label() { - blabel->set_text(prefs.button.ref().get_button_text()); + bool any = toggle_any->get_active(); + toggle_shift->set_sensitive(!any); + toggle_control->set_sensitive(!any); + toggle_alt->set_sensitive(!any); + toggle_super->set_sensitive(!any); } diff --git a/service/prefs.h b/service/prefs.h index 42914c31..99dd5b63 100644 --- a/service/prefs.h +++ b/service/prefs.h @@ -23,65 +23,6 @@ class Prefs { public: Prefs(); virtual ~Prefs() {} - void update_device_list(); - void update_extra_buttons(); -private: - void set_button_label(); - - void on_add(); - void on_remove(); - void on_add_extra(); - void on_edit_extra(); - void on_remove_extra(); - void on_select_button(); -public: - void on_button_editing_started(GtkCellEditable *editable, const gchar *path); -private: - void on_device_toggled(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter); - void on_device_timeout_changed(const Glib::ustring& path, const Glib::ustring& new_text); - bool select_row(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter, std::string name); - - class ExceptionColumns : public Gtk::TreeModel::ColumnRecord { - public: - ExceptionColumns() { add(app); add(user_app); add(button); } - Gtk::TreeModelColumn app; - Gtk::TreeModelColumn user_app, button; - }; - ExceptionColumns cols; - Glib::RefPtr tm; - Gtk::TreeView* tv; - - class Single : public Gtk::TreeModel::ColumnRecord { - public: - Single() { add(name); } - Gtk::TreeModelColumn name; - }; - Single timeout_columns; - - class DeviceColumns : public Gtk::TreeModel::ColumnRecord { - public: - DeviceColumns() { add(enabled); add(name); add(timeout); } - Gtk::TreeModelColumn enabled; - Gtk::TreeModelColumn name; - Gtk::TreeModelColumn timeout; - }; - DeviceColumns dcs; - Gtk::TreeView* dtv; - Glib::RefPtr dtm; - - class ExtraColumns : public Gtk::TreeModel::ColumnRecord { - public: - ExtraColumns() { add(str); add(i); } - Gtk::TreeModelColumn str; - Gtk::TreeModelColumn::iterator> i; - }; - ExtraColumns ecs; - Gtk::TreeView *etv; - Glib::RefPtr etm; - - Gtk::Label* blabel; - Gtk::Frame *frame_tablet; - bool ignore_device_toggled; }; #endif diff --git a/service/win.cc b/service/win.cc index da41b0e8..c2383ca4 100644 --- a/service/win.cc +++ b/service/win.cc @@ -14,7 +14,6 @@ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "actions.h" -#include "prefs.h" #include "win.h" #include "main.h" #include @@ -164,7 +163,7 @@ class MenuCheck : private Base { } }; -Win::Win() : actions(new Actions), prefs_tab(new Prefs), stats(new Stats) { +Win::Win() : actions(new Actions), stats(new Stats) { show_hide_icon(); prefs.tray_icon.connect(new Notifier(sigc::mem_fun(*this, &Win::show_hide_icon))); disabled.connect(new Notifier(sigc::mem_fun(*this, &Win::timeout))); diff --git a/service/win.h b/service/win.h index fcaa7d46..5276e876 100644 --- a/service/win.h +++ b/service/win.h @@ -35,8 +35,7 @@ class Win : Timeout { Win(); Gtk::Window& get_window() { return *win; } - boost::shared_ptr actions; - boost::shared_ptr prefs_tab; + boost::shared_ptr actions; boost::shared_ptr stats; void show(); void hide(); @@ -46,7 +45,7 @@ class Win : Timeout { private: bool on_icon_size_changed(int); virtual void timeout(); - void on_help_toggled(); + void on_help_toggled(); void show_popup(guint, guint32); void show_hide_icon(); @@ -65,7 +64,6 @@ class Stats { Stats(); bool on_stroke(boost::shared_ptr); private: - void on_pdf(); void on_cursor_changed(); class ModelColumns : public Gtk::TreeModel::ColumnRecord { From 65f7f08ab4bc9beef13a822a0d71e26e260a0e28 Mon Sep 17 00:00:00 2001 From: "berkeleybross@gmail.com" Date: Mon, 28 Dec 2020 16:00:50 +0000 Subject: [PATCH 13/69] Removed actions screen --- build/run-local.sh | 4 +- service/actions.cc | 883 --------------------------------------------- service/actions.h | 117 ------ service/win.cc | 2 +- service/win.h | 3 - 5 files changed, 3 insertions(+), 1006 deletions(-) diff --git a/build/run-local.sh b/build/run-local.sh index 20796fdd..860e3c27 100755 --- a/build/run-local.sh +++ b/build/run-local.sh @@ -8,6 +8,6 @@ set -e make clean make -j2 - Write-Host "Starting..." - ./easy-gesture + echo "Starting..." + ./easy-gesture -v ) diff --git a/service/actions.cc b/service/actions.cc index 10e3d517..5c5e99a8 100644 --- a/service/actions.cc +++ b/service/actions.cc @@ -26,38 +26,6 @@ #include #include -bool TreeViewMulti::on_button_press_event(GdkEventButton* event) { - int cell_x, cell_y; - Gtk::TreeViewColumn *column; - pending = (get_path_at_pos(event->x, event->y, path, column, cell_x, cell_y)) - && (get_selection()->is_selected(path)) - && !(event->state & (GDK_CONTROL_MASK|GDK_SHIFT_MASK)); - return Gtk::TreeView::on_button_press_event(event); -} - -bool TreeViewMulti::on_button_release_event(GdkEventButton* event) { - if (pending) { - pending = false; - get_selection()->unselect_all(); - get_selection()->select(path); - } - return Gtk::TreeView::on_button_release_event(event); -} - -void TreeViewMulti::on_drag_begin(const Glib::RefPtr &context) { - pending = false; - if (get_selection()->count_selected_rows() <= 1) - return Gtk::TreeView::on_drag_begin(context); - Glib::RefPtr pb = render_icon_pixbuf(Gtk::Stock::DND_MULTIPLE, Gtk::ICON_SIZE_DND); - context->set_icon(pb, pb->get_width(), pb->get_height()); -} - -bool negate(bool b) { return !b; } - -TreeViewMulti::TreeViewMulti() : Gtk::TreeView(), pending(false) { - get_selection()->set_select_function([this](const Glib::RefPtr&, const Gtk::TreePath&, const bool&) { return !this->pending; }); -} - enum Type { COMMAND, KEY, TEXT, SCROLL, IGNORE, BUTTON, MISC }; struct TypeInfo { @@ -78,860 +46,9 @@ TypeInfo all_types[8] = { { COMMAND, 0, 0, CELL_RENDERER_TEXTISH_MODE_Text } }; -const Type from_name(Glib::ustring name) { - for (TypeInfo *i = all_types;; i++) - if (!i->name || _(i->name) == name) - return i->type; -} - -const char *type_info_to_name(const std::type_info *info) { - for (TypeInfo *i = all_types; i->name; i++) - if (i->type_info == info) - return _(i->name); - return ""; -} - -static void on_actions_cell_data_arg(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) { - GtkTreePath *path = gtk_tree_model_get_path(tree_model, iter); - gchar *path_string = gtk_tree_path_to_string(path); - ((Actions *)data)->on_cell_data_arg(cell, path_string); - g_free(path_string); - gtk_tree_path_free(path); -} - -static void on_actions_accel_edited(CellRendererTextish *, gchar *path, GdkModifierType mods, guint code, gpointer data) { - guint key = XkbKeycodeToKeysym(dpy, code, 0, 0); - ((Actions *)data)->on_accel_edited(path, key, mods, code); -} - -static void on_actions_combo_edited(CellRendererTextish *, gchar *path, guint row, gpointer data) { - ((Actions *)data)->on_combo_edited(path, row); -} - -static void on_actions_text_edited(GtkCellRendererText *, gchar *path, gchar *new_text, gpointer data) { - ((Actions *)data)->on_text_edited(path, new_text); -} - -static void on_actions_editing_started(GtkCellRenderer *, GtkCellEditable *editable, const gchar *path, gpointer data) { - ((Actions *)data)->on_arg_editing_started(editable, path); -} - -Actions::Actions() : - apps_view(0), - vpaned_position(-1), - editing_new(false), - editing(false), - action_list(actions.get_root()) -{ - Gtk::ScrolledWindow *sw; - widgets->get_widget("scrolledwindow_actions", sw); - widgets->get_widget("treeview_apps", apps_view); - sw->add(tv); - tv.show(); - - Gtk::Button *button_add, *button_add_app, *button_add_group; - widgets->get_widget("button_add_action", button_add); - widgets->get_widget("button_delete_action", button_delete); - widgets->get_widget("button_record", button_record); - widgets->get_widget("button_add_app", button_add_app); - widgets->get_widget("button_add_group", button_add_group); - widgets->get_widget("button_remove_app", button_remove_app); - widgets->get_widget("button_reset_actions", button_reset_actions); - widgets->get_widget("check_show_deleted", check_show_deleted); - widgets->get_widget("expander_apps", expander_apps); - widgets->get_widget("vpaned_apps", vpaned_apps); - button_record->signal_clicked().connect(sigc::mem_fun(*this, &Actions::on_button_record)); - button_delete->signal_clicked().connect(sigc::mem_fun(*this, &Actions::on_button_delete)); - button_add->signal_clicked().connect(sigc::mem_fun(*this, &Actions::on_button_new)); - button_add_app->signal_clicked().connect(sigc::mem_fun(*this, &Actions::on_add_app)); - button_add_group->signal_clicked().connect(sigc::mem_fun(*this, &Actions::on_add_group)); - button_remove_app->signal_clicked().connect(sigc::mem_fun(*this, &Actions::on_remove_app)); - button_reset_actions->signal_clicked().connect(sigc::mem_fun(*this, &Actions::on_reset_actions)); - - tv.signal_row_activated().connect(sigc::mem_fun(*this, &Actions::on_row_activated)); - tv.get_selection()->signal_changed().connect(sigc::mem_fun(*this, &Actions::on_selection_changed)); - - tm = Store::create(cols, this); - - tv.get_selection()->set_mode(Gtk::SELECTION_MULTIPLE); - - int n; - n = tv.append_column(_("Stroke"), cols.stroke); - tv.get_column(n-1)->set_sort_column(cols.id); - tm->set_sort_func(cols.id, sigc::mem_fun(*this, &Actions::compare_ids)); - tm->set_default_sort_func(sigc::mem_fun(*this, &Actions::compare_ids)); - tm->set_sort_column(Gtk::TreeSortable::DEFAULT_SORT_COLUMN_ID, Gtk::SORT_ASCENDING); - - n = tv.append_column(_("Name"), cols.name); - Gtk::CellRendererText *name_renderer = dynamic_cast(tv.get_column_cell_renderer(n-1)); - name_renderer->property_editable() = true; - name_renderer->signal_edited().connect(sigc::mem_fun(*this, &Actions::on_name_edited)); - name_renderer->signal_editing_started().connect(sigc::mem_fun(*this, &Actions::on_something_editing_started)); - name_renderer->signal_editing_canceled().connect(sigc::mem_fun(*this, &Actions::on_something_editing_canceled)); - Gtk::TreeView::Column *col_name = tv.get_column(n-1); - col_name->set_sort_column(cols.name); - col_name->set_cell_data_func(*name_renderer, sigc::mem_fun(*this, &Actions::on_cell_data_name)); - col_name->set_resizable(); - - type_store = Gtk::ListStore::create(type); - for (TypeInfo *i = all_types; i->name; i++) - (*(type_store->append()))[type.type] = _(i->name); - - Gtk::CellRendererCombo *type_renderer = Gtk::manage(new Gtk::CellRendererCombo); - type_renderer->property_model() = type_store; - type_renderer->property_editable() = true; - type_renderer->property_text_column() = 0; - type_renderer->property_has_entry() = false; - type_renderer->signal_edited().connect(sigc::mem_fun(*this, &Actions::on_type_edited)); - type_renderer->signal_editing_started().connect(sigc::mem_fun(*this, &Actions::on_something_editing_started)); - type_renderer->signal_editing_canceled().connect(sigc::mem_fun(*this, &Actions::on_something_editing_canceled)); - - n = tv.append_column(_("Type"), *type_renderer); - Gtk::TreeView::Column *col_type = tv.get_column(n-1); - col_type->add_attribute(type_renderer->property_text(), cols.type); - col_type->set_cell_data_func(*type_renderer, sigc::mem_fun(*this, &Actions::on_cell_data_type)); - - int i = 0; - while (Misc::types[i]) i++; - CellRendererTextish *arg_renderer = cell_renderer_textish_new_with_items ((gchar**)Misc::types, i); - GtkTreeViewColumn *col_arg = gtk_tree_view_column_new_with_attributes(_("Details"), GTK_CELL_RENDERER (arg_renderer), "text", cols.arg.index(), nullptr); - gtk_tree_view_append_column(tv.gobj(), col_arg); - - gtk_tree_view_column_set_cell_data_func (col_arg, GTK_CELL_RENDERER (arg_renderer), on_actions_cell_data_arg, this, nullptr); - gtk_tree_view_column_set_resizable(col_arg, true); - g_object_set(arg_renderer, "editable", true, nullptr); - g_signal_connect(arg_renderer, "key-edited", G_CALLBACK(on_actions_accel_edited), this); - g_signal_connect(arg_renderer, "combo-edited", G_CALLBACK(on_actions_combo_edited), this); - g_signal_connect(arg_renderer, "edited", G_CALLBACK(on_actions_text_edited), this); - g_signal_connect(arg_renderer, "editing-started", G_CALLBACK(on_actions_editing_started), this); - - update_action_list(); - tv.set_model(tm); - tv.enable_model_drag_source(); - tv.enable_model_drag_dest(); - - check_show_deleted->signal_toggled().connect(sigc::mem_fun(*this, &Actions::update_action_list)); - expander_apps->property_expanded().signal_changed().connect(sigc::mem_fun(*this, &Actions::on_apps_selection_changed)); - expander_apps->property_expanded().signal_changed().connect(sigc::mem_fun(*this, &Actions::on_expanded)); - apps_view->get_selection()->signal_changed().connect(sigc::mem_fun(*this, &Actions::on_apps_selection_changed)); - apps_model = AppsStore::create(ca, this); - - load_app_list(apps_model->children(), actions.get_root()); - update_counts(); - - apps_view->append_column_editable(_("Application"), ca.app); - apps_view->get_column(0)->set_expand(true); - apps_view->get_column(0)->set_cell_data_func( - *apps_view->get_column_cell_renderer(0), sigc::mem_fun(*this, &Actions::on_cell_data_apps)); - Gtk::CellRendererText *app_name_renderer = - dynamic_cast(apps_view->get_column_cell_renderer(0)); - app_name_renderer->signal_edited().connect(sigc::mem_fun(*this, &Actions::on_group_name_edited)); - apps_view->append_column(_("Actions"), ca.count); - - apps_view->set_model(apps_model); - apps_view->enable_model_drag_dest(); - apps_view->expand_all(); -} - -void Actions::load_app_list(const Gtk::TreeNodeChildren &ch, ActionListDiff *actions) { - Gtk::TreeRow row = *(apps_model->append(ch)); - row[ca.app] = app_name_hr(actions->name); - row[ca.actions] = actions; - for (ActionListDiff::iterator i = actions->begin(); i != actions->end(); i++) - load_app_list(row.children(), &(*i)); -} - -void Actions::on_cell_data_name(Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter) { - bool bold = (*iter)[cols.name_bold]; - bool deactivated = (*iter)[cols.deactivated]; - Gtk::CellRendererText *renderer = dynamic_cast(cell); - if (renderer) - renderer->property_weight().set_value(bold ? 700 : 400); - cell->property_sensitive().set_value(!deactivated); -} - -void Actions::on_cell_data_type(Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter) { - bool bold = (*iter)[cols.action_bold]; - bool deactivated = (*iter)[cols.deactivated]; - Gtk::CellRendererText *renderer = dynamic_cast(cell); - if (renderer) - renderer->property_weight().set_value(bold ? 700 : 400); - cell->property_sensitive().set_value(!deactivated); -} - -void Actions::on_cell_data_arg(GtkCellRenderer *cell, gchar *path) { - Gtk::TreeModel::iterator iter = tm->get_iter(path); - bool bold = (*iter)[cols.action_bold]; - bool deactivated = (*iter)[cols.deactivated]; - g_object_set(cell, "sensitive", !deactivated, "weight", bold ? 700 : 400, nullptr); - CellRendererTextish *renderer = CELL_RENDERER_TEXTISH (cell); - if (!renderer) - return; - Glib::ustring str = (*iter)[cols.type]; - renderer->mode = all_types[from_name(str)].mode; -} - -int Actions::compare_ids(const Gtk::TreeModel::iterator &a, const Gtk::TreeModel::iterator &b) { - Unique *x = (*a)[cols.id]; - Unique *y = (*b)[cols.id]; - if (x->level == y->level) { - if (x->i == y->i) - return 0; - if (x->i < y->i) - return -1; - else - return 1; - } - if (x->level < y->level) - return -1; - else - return 1; -} - -bool Actions::AppsStore::row_drop_possible_vfunc(const Gtk::TreeModel::Path &dest, - const Gtk::SelectionData &selection) const { - static bool expecting = false; - static Gtk::TreePath expected; - if (expecting && expected != dest) - expecting = false; - if (!expecting) { - if (gtk_tree_path_get_depth((GtkTreePath *)dest.gobj()) < 2 || dest.back() != 0) - return false; - expected = dest; - expected.up(); - expecting = true; - return false; - } - expecting = false; - Gtk::TreePath src; - Glib::RefPtr model; - if (!Gtk::TreeModel::Path::get_from_selection_data(selection, model, src)) - return false; - if (model != parent->tm) - return false; - Gtk::TreeIter dest_iter = parent->apps_model->get_iter(dest); - ActionListDiff *actions = dest_iter ? (*dest_iter)[parent->ca.actions] : (ActionListDiff *)nullptr; - return actions && actions != parent->action_list; -} - -bool Actions::AppsStore::drag_data_received_vfunc(const Gtk::TreeModel::Path &dest, const Gtk::SelectionData &selection) { - Gtk::TreePath src; - Glib::RefPtr model; - if (!Gtk::TreeModel::Path::get_from_selection_data(selection, model, src)) - return false; - if (model != parent->tm) - return false; - Unique *src_id = (*parent->tm->get_iter(src))[parent->cols.id]; - Gtk::TreeIter dest_iter = parent->apps_model->get_iter(dest); - ActionListDiff *actions = dest_iter ? (*dest_iter)[parent->ca.actions] : (ActionListDiff *)nullptr; - if (!actions || actions == parent->action_list) - return false; - Glib::RefPtr sel = parent->tv.get_selection(); - if (sel->count_selected_rows() <= 1) { - RStrokeInfo si = parent->action_list->get_info(src_id); - parent->action_list->remove(src_id); - actions->add(*si); - } else { - std::vector paths = sel->get_selected_rows(); - for (std::vector::iterator i = paths.begin(); i != paths.end(); ++i) { - Unique *id = (*parent->tm->get_iter(*i))[parent->cols.id]; - RStrokeInfo si = parent->action_list->get_info(id); - parent->action_list->remove(id); - actions->add(*si); - } - } - parent->update_action_list(); - update_actions(); - return true; -} - -bool Actions::Store::row_draggable_vfunc(const Gtk::TreeModel::Path &path) const { - int col; - Gtk::SortType sort; - parent->tm->get_sort_column_id(col, sort); - if (col != Gtk::TreeSortable::DEFAULT_SORT_COLUMN_ID) - return false; - if (sort != Gtk::SORT_ASCENDING) - return false; - Glib::RefPtr sel = parent->tv.get_selection(); - if (sel->count_selected_rows() <= 1) { - Unique *id = (*parent->tm->get_iter(path))[parent->cols.id]; - return id->level == parent->action_list->level; - } else { - std::vector paths = sel->get_selected_rows(); - for (std::vector::iterator i = paths.begin(); i != paths.end(); ++i) { - Unique *id = (*parent->tm->get_iter(*i))[parent->cols.id]; - if (id->level != parent->action_list->level) - return false; - } - return true; - } -} - -bool Actions::Store::row_drop_possible_vfunc(const Gtk::TreeModel::Path &dest, const Gtk::SelectionData &selection) const { - static bool ignore_next = false; - if (gtk_tree_path_get_depth((GtkTreePath *)dest.gobj()) > 1) { - ignore_next = true; - return false; - } - if (ignore_next) { - ignore_next = false; - return false; - } - Gtk::TreePath src; - Glib::RefPtr model; - if (!Gtk::TreeModel::Path::get_from_selection_data(selection, model, src)) - return false; - if (model != parent->tm) - return false; - Unique *src_id = (*parent->tm->get_iter(src))[parent->cols.id]; - Gtk::TreeIter dest_iter = parent->tm->get_iter(dest); - Unique *dest_id = dest_iter ? (*dest_iter)[parent->cols.id] : (Unique *)0; - if (dest_id && src_id->level != dest_id->level) - return false; - return true; -} - -bool Actions::Store::drag_data_received_vfunc(const Gtk::TreeModel::Path &dest, const Gtk::SelectionData &selection) { - Gtk::TreePath src; - Glib::RefPtr model; - if (!Gtk::TreeModel::Path::get_from_selection_data(selection, model, src)) - return false; - if (model != parent->tm) - return false; - Unique *src_id = (*parent->tm->get_iter(src))[parent->cols.id]; - Gtk::TreeIter dest_iter = parent->tm->get_iter(dest); - Unique *dest_id = dest_iter ? (*dest_iter)[parent->cols.id] : (Unique *)0; - if (dest_id && src_id->level != dest_id->level) - return false; - Glib::RefPtr sel = parent->tv.get_selection(); - if (sel->count_selected_rows() <= 1) { - if (parent->action_list->move(src_id, dest_id)) { - (*parent->tm->get_iter(src))[parent->cols.id] = src_id; - update_actions(); - } - } else { - std::vector paths = sel->get_selected_rows(); - bool updated = false; - for (std::vector::iterator i = paths.begin(); i != paths.end(); ++i) { - Unique *id = (*parent->tm->get_iter(*i))[parent->cols.id]; - if (parent->action_list->move(id, dest_id)) - updated = true; - } - if (updated) { - parent->update_action_list(); - update_actions(); - } - } - return false; -} - -void Actions::on_type_edited(const Glib::ustring &path, const Glib::ustring &new_text) { - tv.grab_focus(); - Gtk::TreeRow row(*tm->get_iter(path)); - Type new_type = from_name(new_text); - Type old_type = from_name(row[cols.type]); - bool edit = true; - if (old_type == new_type) { - edit = editing_new; - } else { - row[cols.type] = new_text; - RAction new_action; - if (new_type == COMMAND) { - Glib::ustring cmd_save = row[cols.cmd_save]; - if (cmd_save != "") - edit = false; - new_action = Command::create(cmd_save); - } - if (old_type == COMMAND) { - row[cols.cmd_save] = (Glib::ustring)row[cols.arg]; - } - if (new_type == KEY) { - new_action = SendKey::create(0, (Gdk::ModifierType)0); - edit = true; - } - if (new_type == TEXT) { - new_action = SendText::create(Glib::ustring()); - edit = true; - } - if (new_type == SCROLL) { - new_action = Scroll::create((Gdk::ModifierType)0); - edit = false; - } - if (new_type == IGNORE) { - new_action = Ignore::create((Gdk::ModifierType)0); - edit = false; - } - if (new_type == BUTTON) { - new_action = Button::create((Gdk::ModifierType)0, 0); - edit = true; - } - if (new_type == MISC) { - new_action = Misc::create(Misc::NONE); - edit = true; - } - action_list->set_action(row[cols.id], new_action); - update_row(row); - update_actions(); - } - editing_new = false; - focus(row[cols.id], 3, edit); -} - -void Actions::on_button_delete() { - int n = tv.get_selection()->count_selected_rows(); - - Glib::ustring str; - if (n == 1) - str = Glib::ustring::compose(_("Action \"%1\" is about to be deleted."), get_selected_row()[cols.name]); - else - str = Glib::ustring::compose(ngettext("One action is about to be deleted.", - "%1 actions are about to be deleted", n), n); - - Gtk::MessageDialog *dialog; - widgets->get_widget("dialog_delete", dialog); - dialog->set_message(ngettext("Delete an Action", "Delete Actions", n)); - dialog->set_secondary_text(str); - Gtk::Button *del; - widgets->get_widget("button_delete_delete", del); - - dialog->show(); - del->grab_focus(); - bool ok = dialog->run() == 1; - dialog->hide(); - if (!ok) - return; - - std::vector paths = tv.get_selection()->get_selected_rows(); - for (std::vector::iterator i = paths.begin(); i != paths.end(); ++i) { - Gtk::TreeRow row(*tm->get_iter(*i)); - action_list->remove(row[cols.id]); - } - update_action_list(); - update_actions(); - update_counts(); -} - -void Actions::on_cell_data_apps(Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter) { - ActionListDiff *as = (*iter)[ca.actions]; - Gtk::CellRendererText *renderer = dynamic_cast(cell); - if (renderer) - renderer->property_editable().set_value(actions.get_root() != as && !as->app); -} - -bool Actions::select_app(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter, ActionListDiff *actions) { - if ((*iter)[ca.actions] == actions) { - apps_view->expand_to_path(path); - apps_view->set_cursor(path); - return true; - } - return false; -} - -void Actions::on_add_app() { - std::string name = grabber->select_window(); - if (actions.apps.count(name)) { - apps_model->foreach(sigc::bind(sigc::mem_fun(*this, &Actions::select_app), actions.apps[name])); - return; - } - ActionListDiff *parent = action_list->app ? actions.get_root() : action_list; - ActionListDiff *child = parent->add_child(name, true); - const Gtk::TreeNodeChildren &ch = parent == actions.get_root() ? - apps_model->children().begin()->children() : - apps_view->get_selection()->get_selected()->children(); - Gtk::TreeRow row = *(apps_model->append(ch)); - row[ca.app] = app_name_hr(name); - row[ca.actions] = child; - actions.apps[name] = child; - Gtk::TreePath path = apps_model->get_path(row); - apps_view->expand_to_path(path); - apps_view->set_cursor(path); - update_actions(); -} - -void Actions::on_remove_app() { - if (action_list == actions.get_root()) - return; - int size = action_list->size_rec(); - if (size) { - Gtk::MessageDialog *dialog; - widgets->get_widget("dialog_delete", dialog); - Glib::ustring str = Glib::ustring::compose(_("%1 \"%2\" (containing %3 %4) is about to be deleted."), - action_list->app ? _("The application") : _("The group"), - action_list->name, - size, - ngettext("action", "actions", size)); - dialog->set_message(action_list->app ? _("Delete an Application") : _("Delete an Application Group")); - dialog->set_secondary_text(str); - Gtk::Button *del; - widgets->get_widget("button_delete_delete", del); - dialog->show(); - del->grab_focus(); - bool ok = dialog->run() == 1; - dialog->hide(); - if (!ok) - return; - } - if (!action_list->remove()) - return; - apps_model->erase(*apps_view->get_selection()->get_selected()); - update_actions(); -} - -void Actions::on_reset_actions() { - std::vector paths = tv.get_selection()->get_selected_rows(); - for (std::vector::iterator i = paths.begin(); i != paths.end(); ++i) { - Gtk::TreeRow row(*tm->get_iter(*i)); - action_list->reset(row[cols.id]); - } - update_action_list(); - on_selection_changed(); - update_actions(); -} - -void Actions::on_add_group() { - ActionListDiff *parent = action_list->app ? actions.get_root() : action_list; - Glib::ustring name = _("Group"); - ActionListDiff *child = parent->add_child(name, false); - const Gtk::TreeNodeChildren &ch = parent == actions.get_root() ? - apps_model->children().begin()->children() : - apps_view->get_selection()->get_selected()->children(); - Gtk::TreeRow row = *(apps_model->append(ch)); - row[ca.app] = name; - row[ca.actions] = child; - actions.apps[name] = child; - Gtk::TreePath path = apps_model->get_path(row); - apps_view->expand_to_path(path); - apps_view->set_cursor(path, *apps_view->get_column(0), true); - update_actions(); -} - -void Actions::on_group_name_edited(const Glib::ustring& path, const Glib::ustring& new_text) { - Gtk::TreeRow row(*apps_model->get_iter(path)); - row[ca.app] = new_text; - ActionListDiff *as = row[ca.actions]; - as->name = new_text; - update_actions(); -} - -void Actions::on_expanded() { - if (expander_apps->get_expanded()) { - vpaned_apps->set_position(vpaned_position); - } else { - if(vpaned_apps->property_position_set().get_value()) - vpaned_position = vpaned_apps->get_position(); - else - vpaned_position = -1; - vpaned_apps->property_position_set().set_value(false); - } -} - -void Actions::on_apps_selection_changed() { - ActionListDiff *new_action_list = actions.get_root(); - if (expander_apps->property_expanded().get_value()) { - if (apps_view->get_selection()->count_selected_rows()) { - Gtk::TreeIter i = apps_view->get_selection()->get_selected(); - new_action_list = (*i)[ca.actions]; - } - button_remove_app->set_sensitive(new_action_list != actions.get_root()); - } - if (action_list != new_action_list) { - action_list = new_action_list; - update_action_list(); - on_selection_changed(); - } -} - -bool Actions::count_app_actions(const Gtk::TreeIter &i) { - (*i)[ca.count] = ((ActionListDiff*)(*i)[ca.actions])->count_actions(); - return false; -} - -void Actions::update_counts() { - apps_model->foreach_iter(sigc::mem_fun(*this, &Actions::count_app_actions)); -} - -void Actions::update_action_list() { - check_show_deleted->set_sensitive(action_list != actions.get_root()); - boost::shared_ptr > ids = action_list->get_ids(check_show_deleted->get_active()); - const Gtk::TreeNodeChildren &ch = tm->children(); - - std::list refs; - for (Gtk::TreeIter i = ch.begin(); i != ch.end(); i++) { - Gtk::TreeRowReference ref(tm, Gtk::TreePath(*i)); - refs.push_back(ref); - } - - for (std::list::iterator ref = refs.begin(); ref != refs.end(); ref++) { - Gtk::TreeIter i = tm->get_iter(ref->get_path()); - std::set::iterator id = ids->find((*i)[cols.id]); - if (id == ids->end()) { - tm->erase(i); - } else { - ids->erase(id); - update_row(*i); - } - } - for (std::set::const_iterator i = ids->begin(); i != ids->end(); i++) { - Gtk::TreeRow row = *tm->append(); - row[cols.id] = *i; - update_row(row); - } -} - -void Actions::update_row(const Gtk::TreeRow &row) { - bool deleted, stroke, name, action; - RStrokeInfo si = action_list->get_info(row[cols.id], &deleted, &stroke, &name, &action); - row[cols.stroke] = !si->strokes.empty() && *si->strokes.begin() ? - (*si->strokes.begin())->draw(STROKE_SIZE, stroke ? 4.0 : 2.0) : Stroke::drawEmpty(STROKE_SIZE); - row[cols.name] = si->name; - row[cols.type] = si->action ? type_info_to_name(&typeid(*si->action)) : ""; - row[cols.arg] = si->action ? si->action->get_label() : ""; - row[cols.deactivated] = deleted; - row[cols.name_bold] = name; - row[cols.action_bold] = action; -} - extern boost::shared_ptr > stroke_action; Source recording(false); -class Actions::OnStroke { - Actions *parent; - Gtk::Dialog *dialog; - Gtk::TreeRow &row; - RStroke stroke; - bool run() { - if (stroke->button == 0 && stroke->trivial()) { - grabber->queue_suspend(); - Glib::ustring msg = Glib::ustring::compose( - _("You are about to bind an action to a single click. " - "This might make it difficult to use Button %1 in the future. " - "Are you sure you want to continue?"), - stroke->button ? stroke->button : prefs.button.ref().button); - Gtk::MessageDialog md(*dialog, msg, false, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_YES_NO, true); - bool abort = md.run() != Gtk::RESPONSE_YES; - grabber->queue_resume(); - if (abort) - return false; - } - StrokeSet strokes; - strokes.insert(stroke); - parent->action_list->set_strokes(row[parent->cols.id], strokes); - parent->update_row(row); - parent->on_selection_changed(); - update_actions(); - dialog->response(0); - return false; - } -public: - OnStroke(Actions *parent_, Gtk::Dialog *dialog_, Gtk::TreeRow &row_) : parent(parent_), dialog(dialog_), row(row_) {} - void delayed_run(RStroke stroke_) { - stroke = stroke_; - Glib::signal_idle().connect(sigc::mem_fun(*this, &OnStroke::run)); - stroke_action.reset(); - recording.set(false); - } -}; - -void Actions::on_row_activated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column) { - Gtk::TreeRow row(*tm->get_iter(path)); - Gtk::MessageDialog *dialog; - widgets->get_widget("dialog_record", dialog); - dialog->set_message(_("Record a New Stroke")); - dialog->set_secondary_text(Glib::ustring::compose(_("The next stroke will be associated with the action \"%1\". You can draw it anywhere on the screen (except for the two buttons below)."), row[cols.name])); - - static Gtk::Button *del = 0, *cancel = 0; - if (!del) { - widgets->get_widget("button_record_delete", del); - del->signal_enter().connect(sigc::mem_fun(*grabber, &Grabber::queue_suspend)); - del->signal_leave().connect(sigc::mem_fun(*grabber, &Grabber::queue_resume)); - } - if (!cancel) { - widgets->get_widget("button_record_cancel", cancel); - cancel->signal_enter().connect(sigc::mem_fun(*grabber, &Grabber::queue_suspend)); - cancel->signal_leave().connect(sigc::mem_fun(*grabber, &Grabber::queue_resume)); - } - RStrokeInfo si = action_list->get_info(row[cols.id]); - if (si) - del->set_sensitive(si->strokes.size() != 0); - - OnStroke ps(this, dialog, row); - stroke_action.reset(new sigc::slot(sigc::mem_fun(ps, &OnStroke::delayed_run))); - recording.set(true); - - dialog->show(); - cancel->grab_focus(); - int response = dialog->run(); - dialog->hide(); - stroke_action.reset(); - recording.set(false); - if (response != 1) - return; - - action_list->set_strokes(row[cols.id], StrokeSet()); - update_row(row); - on_selection_changed(); - update_actions(); -} - -void Actions::on_button_record() { - Gtk::TreeModel::Path path; - Gtk::TreeViewColumn *col; - tv.get_cursor(path, col); - on_row_activated(path, col); -} - -Gtk::TreeRow Actions::get_selected_row() { - std::vector paths = tv.get_selection()->get_selected_rows(); - return Gtk::TreeRow(*tm->get_iter(*paths.begin())); -} - -void Actions::on_selection_changed() { - int n = tv.get_selection()->count_selected_rows(); - button_record->set_sensitive(n == 1); - button_delete->set_sensitive(n >= 1); - bool resettable = false; - if (n) { - std::vector paths = tv.get_selection()->get_selected_rows(); - for (std::vector::iterator i = paths.begin(); i != paths.end(); ++i) { - Gtk::TreeRow row(*tm->get_iter(*i)); - if (action_list->resettable(row[cols.id])) { - resettable = true; - break; - } - } - } - button_reset_actions->set_sensitive(resettable); -} - -void Actions::on_button_new() { - editing_new = true; - Unique *before = 0; - if (tv.get_selection()->count_selected_rows()) { - std::vector paths = tv.get_selection()->get_selected_rows(); - Gtk::TreeIter i = tm->get_iter(paths[paths.size()-1]); - i++; - if (i != tm->children().end()) - before = (*i)[cols.id]; - } - - Gtk::TreeModel::Row row = *(tm->append()); - StrokeInfo si; - si.action = Command::create(""); - Unique *id = action_list->add(si, before); - row[cols.id] = id; - std::string name; - if (action_list != actions.get_root()) - name = action_list->name + " "; - name += Glib::ustring::compose(_("Gesture %1"), action_list->order_size()); - action_list->set_name(id, name); - - update_row(row); - focus(id, 1, true); - update_actions(); - update_counts(); -} - -bool Actions::do_focus(Unique *id, Gtk::TreeViewColumn *col, bool edit) { - if (!editing) { - Gtk::TreeModel::Children chs = tm->children(); - for (Gtk::TreeIter i = chs.begin(); i != chs.end(); ++i) - if ((*i)[cols.id] == id) { - tv.set_cursor(Gtk::TreePath(*i), *col, edit); - } - } - return false; -} - -void Actions::focus(Unique *id, int col, bool edit) { - editing = false; - Glib::signal_idle().connect(sigc::bind(sigc::mem_fun(*this, &Actions::do_focus), id, tv.get_column(col), edit)); -} - -void Actions::on_name_edited(const Glib::ustring& path, const Glib::ustring& new_text) { - Gtk::TreeRow row(*tm->get_iter(path)); - action_list->set_name(row[cols.id], new_text); - update_actions(); - update_row(row); - focus(row[cols.id], 2, editing_new); -} - -void Actions::on_text_edited(const gchar *path, const gchar *new_text) { - Gtk::TreeRow row(*tm->get_iter(path)); - Type type = from_name(row[cols.type]); - if (type == COMMAND) { - action_list->set_action(row[cols.id], Command::create(new_text)); - } else if (type == TEXT) { - action_list->set_action(row[cols.id], SendText::create(new_text)); - } else return; - update_row(row); - update_actions(); -} - -void Actions::on_accel_edited(const gchar *path_string, guint accel_key, GdkModifierType mods, guint hardware_keycode) { - Gdk::ModifierType accel_mods = (Gdk::ModifierType)mods; - Gtk::TreeRow row(*tm->get_iter(path_string)); - Type type = from_name(row[cols.type]); - if (type == KEY) { - RSendKey send_key = SendKey::create(accel_key, accel_mods); - Glib::ustring str = send_key->get_label(); - if (row[cols.arg] == str) - return; - action_list->set_action(row[cols.id], boost::static_pointer_cast(send_key)); - } else if (type == SCROLL) { - RScroll scroll = Scroll::create(accel_mods); - Glib::ustring str = scroll->get_label(); - if (row[cols.arg] == str) - return; - action_list->set_action(row[cols.id], boost::static_pointer_cast(scroll)); - } else if (type == IGNORE) { - RIgnore ignore = Ignore::create(accel_mods); - Glib::ustring str = ignore->get_label(); - if (row[cols.arg] == str) - return; - action_list->set_action(row[cols.id], boost::static_pointer_cast(ignore)); - } else return; - update_row(row); - update_actions(); -} - -void Actions::on_combo_edited(const gchar *path_string, guint item) { - RMisc misc = Misc::create((Misc::Type)item); - Glib::ustring str = misc->get_label(); - Gtk::TreeRow row(*tm->get_iter(path_string)); - if (row[cols.arg] == str) - return; - action_list->set_action(row[cols.id], boost::static_pointer_cast(misc)); - update_row(row); - update_actions(); -} - -void Actions::on_something_editing_canceled() { - editing_new = false; -} - -void Actions::on_something_editing_started(Gtk::CellEditable* editable, const Glib::ustring& path) { - editing = true; -} - -void Actions::on_arg_editing_started(GtkCellEditable *editable, const gchar *path) { - tv.grab_focus(); - Gtk::TreeRow row(*tm->get_iter(path)); - if (from_name(row[cols.type]) != BUTTON) - return; - ButtonInfo bi; - RButton bt = boost::static_pointer_cast