summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.rst15
-rw-r--r--MANIFEST.in10
-rw-r--r--Makefile19
-rw-r--r--PKG-INFO48
-rw-r--r--docs/index.rst13
-rw-r--r--flatpak/org.gtimelog.GTimeLog.json43
-rw-r--r--flatpak/org.gtimelog.GTimeLog.yaml40
-rw-r--r--release.mk8
-rwxr-xr-xsetup.py1
-rw-r--r--src/gtimelog.egg-info/PKG-INFO48
-rw-r--r--src/gtimelog.egg-info/SOURCES.txt7
-rw-r--r--src/gtimelog/__init__.py2
-rw-r--r--src/gtimelog/about.ui2
-rw-r--r--src/gtimelog/help/C/figures/gtimelog.pngbin7527 -> 0 bytes
-rw-r--r--src/gtimelog/help/C/index.page24
-rw-r--r--src/gtimelog/help/C/legal.xml8
-rw-r--r--src/gtimelog/help/C/shortcuts.page195
-rw-r--r--src/gtimelog/main.py66
-rw-r--r--src/gtimelog/menus.ui20
-rw-r--r--src/gtimelog/po/POTFILES.in13
-rw-r--r--src/gtimelog/po/en.po127
-rw-r--r--src/gtimelog/po/gtimelog.pot127
-rw-r--r--src/gtimelog/po/lt.po140
-rw-r--r--src/gtimelog/shortcuts.ui252
24 files changed, 831 insertions, 397 deletions
diff --git a/CHANGES.rst b/CHANGES.rst
index e9526e8..ed48770 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -1,6 +1,21 @@
Changelog
---------
+0.11.2 (2018-11-03)
+~~~~~~~~~~~~~~~~~~~
+
+- Window menu now includes items previously shown only in the app menu:
+ Preferences, About (GH: #126).
+
+- Keyboard shortcuts window (press Ctrl+Shift+?).
+
+- Dropped the help page (there was only one and it was only listing keyboard
+ shortucts, and it was also incomplete and had no translations).
+
+- Bugfix: if timelog.txt was a symlink, changes to the symlink target would
+ not get noticed automatically (GH: #128).
+
+
0.11.1 (2018-07-18)
~~~~~~~~~~~~~~~~~~~
diff --git a/MANIFEST.in b/MANIFEST.in
index b759c7f..7dd0135 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,6 +1,6 @@
include COPYING
include *.rst *.txt
-include Makefile
+include Makefile *.mk
include gtimelog
include gtimelog.desktop
include gtimelog.desktop.in
@@ -16,13 +16,7 @@ include benchmark.py
recursive-include src *.png *.ui *.xml *.css *.rst gschemas.compiled
recursive-include docs *.png *.rst *.css Makefile
recursive-include scripts *.py *.rst
-recursive-include src/gtimelog/help *.page *.xml *.png
recursive-include src/gtimelog/po *.po *.pot *.in
+recursive-include flatpak *.yaml
prune docs/build
-
-# added by check_manifest.py
-include *.mk
-
-# added by check_manifest.py
-recursive-include flatpak *.json
diff --git a/Makefile b/Makefile
index 7b17a4e..7ecce67 100644
--- a/Makefile
+++ b/Makefile
@@ -52,6 +52,25 @@ update-translations:
cd $(po_dir) && intltool-update -g gtimelog -p
for po in $(po_files); do msgmerge -U $$po $(po_dir)/gtimelog.pot; done
+.PHONY: mo-files
+mo-files: $(mo_files)
+
+.PHONY: flatpak
+flatpak:
+ # you may need to install the platform and sdk before this will work
+ # flatpak install flathub org.gnome.Platform//3.30 org.gnome.Sdk//3.30
+ flatpak-builder --force-clean build/flatpak flatpak/org.gtimelog.GTimeLog.yaml
+ # to run it do
+ # flatpak-builder --run build/flatpak flatpak/org.gtimelog.GTimeLog.yaml gtimelog
+
+.PHONY: flatpak-install
+flatpak-install:
+ # you may need to install the platform and sdk before this will work
+ # flatpak install flathub org.gnome.Platform//3.30 org.gnome.Sdk//3.30
+ flatpak-builder --force-clean build/flatpak flatpak/org.gtimelog.GTimeLog.yaml --install --user
+ # to run it do
+ # flatpak run org.gtimelog.GTimeLog
+
%-gtk3.10.ui: %.ui
sed -e 's/margin_start/margin_left/' \
-e 's/margin_end/margin_right/' \
diff --git a/PKG-INFO b/PKG-INFO
index 46bf757..1e3d7ef 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: gtimelog
-Version: 0.11.1
+Version: 0.11.2
Summary: A Gtk+ time tracking application
Home-page: https://gtimelog.org/
Author: Marius Gedminas
@@ -110,6 +110,21 @@ Description: GTimeLog
Changelog
---------
+ 0.11.2 (2018-11-03)
+ ~~~~~~~~~~~~~~~~~~~
+
+ - Window menu now includes items previously shown only in the app menu:
+ Preferences, About (GH: #126).
+
+ - Keyboard shortcuts window (press Ctrl+Shift+?).
+
+ - Dropped the help page (there was only one and it was only listing keyboard
+ shortucts, and it was also incomplete and had no translations).
+
+ - Bugfix: if timelog.txt was a symlink, changes to the symlink target would
+ not get noticed automatically (GH: #128).
+
+
0.11.1 (2018-07-18)
~~~~~~~~~~~~~~~~~~~
@@ -174,36 +189,6 @@ Description: GTimeLog
to 0 to hide the estimate).
- 0.10.0 (2015-09-29)
- ~~~~~~~~~~~~~~~~~~~
-
- * Use Tango colors in the main text buffer (GH: #13).
-
- * Allow tagging entries (GH: #19)
-
- - The syntax is ``category: text -- tag1 tag2``
- - Per-tag summaries show up in reports
-
- * Use GtkApplication instead of own DBus server for enforcing single-instance.
-
- - Drop --replace, --ignore-dbus command-line options because of this.
- - Require glib and gio to be version 2.40 or newer for sane
- GtkApplication-based command line parsing
- (check with ``pkg-config --modversion glib-2.0 gio-2.0``).
-
- * Remove obsolete code:
-
- - Drop support for Python 2.6 (PyGObject dropped support for it long ago).
- - Drop PyGtk/Gtk+ 2 support code (it didn't work since 0.9.1 anyway).
- - Drop EggTrayIcon support (it was for Gtk+ 2 only anyway).
- - Drop the --prefer-pygtk command-line option.
-
- * Disable tray icon by default for new users (existing gtimelogrc files will be
- untouched).
-
- * Improve tray icon selection logic for best contrast (GH: #29).
-
-
Older versions
~~~~~~~~~~~~~~
@@ -211,6 +196,7 @@ Description: GTimeLog
.. _full changelog: https://github.com/gtimelog/gtimelog/blob/master/CHANGES.rst
+Keywords: time log logging timesheets gnome gtk
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: X11 Applications :: GTK
diff --git a/docs/index.rst b/docs/index.rst
index dfc885e..d281420 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -68,6 +68,14 @@ Tags must be separated from the rest of the entry by " -- ", i.e.,
double-dash surrounded by spaces. Tags will *not* be shown in the
main UI pane.
+Back-dating Entries
+===================
+
+If you forget to enter an activity, you can enter it after the fact by
+prefixing it with a full time ("09:30 morning meeting") or a two digit minute-offset
+("-10 morning meeting"). Note that the new activity must still be after
+the last entered event, or things will become confusing!
+
Tasks pane
==========
@@ -126,11 +134,6 @@ which is outside the scope of this document.)
Correcting mistakes
===================
-If you forget to enter an activity, you can enter it after the fact by
-prefixing it with a full time ("09:30 morning meeting") or a minute-offset
-("-10 morning meeting"). Note that the new activity must still be after
-the last entered event, or things will become confusing!
-
If you make a mistake and type in the wrong activity name, don't worry.
GTimeLog stores the time log in a simple plain text file. You can edit it
by choosing Edit log from the menu (or pressing Ctrl-E).
diff --git a/flatpak/org.gtimelog.GTimeLog.json b/flatpak/org.gtimelog.GTimeLog.json
deleted file mode 100644
index 07d8fba..0000000
--- a/flatpak/org.gtimelog.GTimeLog.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "id": "org.gtimelog.GTimeLog",
- "runtime": "org.gnome.Platform",
- "runtime-version": "3.26",
- "sdk": "org.gnome.Sdk",
- "command": "gtimelog",
- "tags": ["nightly"],
- "modules": [
- {
- "name": "gtimelog",
- "sources": [
- {
- "type": "git",
- "url": "https://github.com/gtimelog/gtimelog.git"
- }
- ],
- "no-make-install": true,
- "buildsystem": "simple",
- "build-commands": [
- "sed -i -e '/install_requires=..PyGObject/d' setup.py",
- "python3 setup.py -q install --prefix=/app",
- "install -D -m 644 gtimelog.desktop /app/share/applications/gtimelog.desktop",
- "install -D -m 644 src/gtimelog/gtimelog-large.png /app/share/icons/hicolor/256x256/apps/gtimelog.png"
- ]
- }
- ],
- "finish-args": [
- /* X11 + XShm access */
- "--share=ipc", "--socket=x11",
- /* Wayland access */
- "--socket=wayland",
- "--socket=session-bus",
- /* dconf */
- "--filesystem=xdg-run/dconf",
- "--filesystem=~/.config/dconf:ro",
- "--talk-name=ca.desrt.dconf",
- "--env=DCONF_USER_CONFIG_DIR=.config/dconf"
- ],
- "rename-desktop-file": "gtimelog.desktop",
- "rename-appdata-file": "gtimelog.appdata.xml",
- "rename-icon": "gtimelog",
- "desktop-file-name-prefix": "(Nightly) "
-}
diff --git a/flatpak/org.gtimelog.GTimeLog.yaml b/flatpak/org.gtimelog.GTimeLog.yaml
new file mode 100644
index 0000000..71420a3
--- /dev/null
+++ b/flatpak/org.gtimelog.GTimeLog.yaml
@@ -0,0 +1,40 @@
+---
+app-id: org.gtimelog.GTimeLog
+runtime: org.gnome.Platform
+runtime-version: "3.30"
+sdk: org.gnome.Sdk
+command: gtimelog
+tags:
+ - nightly
+modules:
+ - name: gtimelog
+ sources:
+ - type: git
+ url: https://github.com/gtimelog/gtimelog.git
+ no-make-install: true
+ buildsystem: simple
+ build-commands:
+ - make mo-files
+ - pip3 install --prefix=/app --no-deps .
+ - install -D -m 644 gtimelog.desktop /app/share/applications/gtimelog.desktop
+ - install -D -m 644 src/gtimelog/gtimelog-large.png /app/share/icons/hicolor/256x256/apps/gtimelog.png
+finish-args:
+ # X11 + XShm access
+ - --share=ipc
+ - --socket=x11
+ # Wayland access
+ - --socket=wayland
+ - --socket=session-bus
+ # dconf access
+ - --filesystem=xdg-run/dconf
+ - --filesystem=~/.config/dconf:ro
+ - --talk-name=ca.desrt.dconf
+ - --env=DCONF_USER_CONFIG_DIR=.config/dconf
+ # network access (for eventual outgoing SMTP)
+ - --share=network
+ # filesystem access to legacy data directory
+ - --filesystem=~/.gtimelog
+rename-appdata-file: gtimelog.appdata.xml
+rename-desktop-file: gtimelog.desktop
+rename-icon: gtimelog
+desktop-file-name-suffix: ' (Nightly)'
diff --git a/release.mk b/release.mk
index 8179a56..44e3b92 100644
--- a/release.mk
+++ b/release.mk
@@ -1,4 +1,4 @@
-# Makefile.rules version 1.1 (2017-12-20)
+# Makefile.rules version 1.2.1 (2018-11-03)
#
# Helpful Makefile rules for releasing Python packages.
# https://github.com/mgedmin/python-project-skel
@@ -11,7 +11,7 @@ CHANGELOG_FORMAT ?= $(changelog_ver) ($(changelog_date))
# These should be fine
PYTHON ?= python
-PYPI_PUBLISH ?= rm -rf dist && $(PYTHON) setup.py -q sdist bdist_wheel && twine upload dist/*
+PYPI_PUBLISH ?= rm -rf dist && $(PYTHON) setup.py -q sdist bdist_wheel && twine check dist/* && twine upload dist/*
# These should be fine, as long as you use Git
VCS_GET_LATEST ?= git pull
@@ -54,7 +54,7 @@ distcheck-sdist:
$(VCS_EXPORT) && \
cd tmp && \
tar -xzf ../dist/$$pkg_and_version.tar.gz && \
- diff -ur $$pkg_and_version tree -x PKG-INFO -x setup.cfg -x '*.egg-info' && \
+ diff -ur $$pkg_and_version tree -x PKG-INFO -x setup.cfg -x '*.egg-info' -I'^#' && \
cd $$pkg_and_version && \
make dist check && \
cd .. && \
@@ -64,7 +64,7 @@ distcheck-sdist:
cd ../two/ && \
tar -xzf ../$$pkg_and_version/dist/$$pkg_and_version.tar.gz && \
cd .. && \
- diff -ur one two -x SOURCES.txt && \
+ diff -ur one two -x SOURCES.txt -I'^#:' && \
cd .. && \
rm -rf tmp && \
echo "sdist seems to be ok"
diff --git a/setup.py b/setup.py
index da849e5..007a9b7 100755
--- a/setup.py
+++ b/setup.py
@@ -55,6 +55,7 @@ setup(
description=short_description,
long_description=long_description,
license='GPL',
+ keywords='time log logging timesheets gnome gtk',
classifiers=[
'Development Status :: 4 - Beta',
'Environment :: X11 Applications :: GTK',
diff --git a/src/gtimelog.egg-info/PKG-INFO b/src/gtimelog.egg-info/PKG-INFO
index 46bf757..1e3d7ef 100644
--- a/src/gtimelog.egg-info/PKG-INFO
+++ b/src/gtimelog.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: gtimelog
-Version: 0.11.1
+Version: 0.11.2
Summary: A Gtk+ time tracking application
Home-page: https://gtimelog.org/
Author: Marius Gedminas
@@ -110,6 +110,21 @@ Description: GTimeLog
Changelog
---------
+ 0.11.2 (2018-11-03)
+ ~~~~~~~~~~~~~~~~~~~
+
+ - Window menu now includes items previously shown only in the app menu:
+ Preferences, About (GH: #126).
+
+ - Keyboard shortcuts window (press Ctrl+Shift+?).
+
+ - Dropped the help page (there was only one and it was only listing keyboard
+ shortucts, and it was also incomplete and had no translations).
+
+ - Bugfix: if timelog.txt was a symlink, changes to the symlink target would
+ not get noticed automatically (GH: #128).
+
+
0.11.1 (2018-07-18)
~~~~~~~~~~~~~~~~~~~
@@ -174,36 +189,6 @@ Description: GTimeLog
to 0 to hide the estimate).
- 0.10.0 (2015-09-29)
- ~~~~~~~~~~~~~~~~~~~
-
- * Use Tango colors in the main text buffer (GH: #13).
-
- * Allow tagging entries (GH: #19)
-
- - The syntax is ``category: text -- tag1 tag2``
- - Per-tag summaries show up in reports
-
- * Use GtkApplication instead of own DBus server for enforcing single-instance.
-
- - Drop --replace, --ignore-dbus command-line options because of this.
- - Require glib and gio to be version 2.40 or newer for sane
- GtkApplication-based command line parsing
- (check with ``pkg-config --modversion glib-2.0 gio-2.0``).
-
- * Remove obsolete code:
-
- - Drop support for Python 2.6 (PyGObject dropped support for it long ago).
- - Drop PyGtk/Gtk+ 2 support code (it didn't work since 0.9.1 anyway).
- - Drop EggTrayIcon support (it was for Gtk+ 2 only anyway).
- - Drop the --prefer-pygtk command-line option.
-
- * Disable tray icon by default for new users (existing gtimelogrc files will be
- untouched).
-
- * Improve tray icon selection logic for best contrast (GH: #29).
-
-
Older versions
~~~~~~~~~~~~~~
@@ -211,6 +196,7 @@ Description: GTimeLog
.. _full changelog: https://github.com/gtimelog/gtimelog/blob/master/CHANGES.rst
+Keywords: time log logging timesheets gnome gtk
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: X11 Applications :: GTK
diff --git a/src/gtimelog.egg-info/SOURCES.txt b/src/gtimelog.egg-info/SOURCES.txt
index 672a96b..88399bb 100644
--- a/src/gtimelog.egg-info/SOURCES.txt
+++ b/src/gtimelog.egg-info/SOURCES.txt
@@ -30,7 +30,7 @@ docs/gtimelog.png
docs/index.rst
docs/mg.css
docs/website.rst
-flatpak/org.gtimelog.GTimeLog.json
+flatpak/org.gtimelog.GTimeLog.yaml
scripts/README.rst
scripts/difftime.py
scripts/export-my-calendar.py
@@ -51,6 +51,7 @@ src/gtimelog/menus.ui
src/gtimelog/preferences-gtk3.10.ui
src/gtimelog/preferences.ui
src/gtimelog/settings.py
+src/gtimelog/shortcuts.ui
src/gtimelog/timelog.py
src/gtimelog.egg-info/PKG-INFO
src/gtimelog.egg-info/SOURCES.txt
@@ -61,10 +62,6 @@ src/gtimelog.egg-info/requires.txt
src/gtimelog.egg-info/top_level.txt
src/gtimelog/data/gschemas.compiled
src/gtimelog/data/org.gtimelog.gschema.xml
-src/gtimelog/help/C/index.page
-src/gtimelog/help/C/legal.xml
-src/gtimelog/help/C/shortcuts.page
-src/gtimelog/help/C/figures/gtimelog.png
src/gtimelog/po/POTFILES.in
src/gtimelog/po/en.po
src/gtimelog/po/gtimelog.pot
diff --git a/src/gtimelog/__init__.py b/src/gtimelog/__init__.py
index 1132dd2..803fb23 100644
--- a/src/gtimelog/__init__.py
+++ b/src/gtimelog/__init__.py
@@ -1,3 +1,3 @@
# The gtimelog package.
-__version__ = '0.11.1'
+__version__ = '0.11.2'
diff --git a/src/gtimelog/about.ui b/src/gtimelog/about.ui
index 4f8a07e..4d4b2d9 100644
--- a/src/gtimelog/about.ui
+++ b/src/gtimelog/about.ui
@@ -7,7 +7,7 @@
<property name="modal">True</property>
<property name="program_name" translatable="yes">Time Log</property>
<property name="version">(placeholder)</property>
- <property name="copyright" translatable="yes">Copyright © 2004–2017 Marius Gedminas and contributors.</property>
+ <property name="copyright" translatable="yes">Copyright © 2004–2018 Marius Gedminas and contributors.</property>
<property name="comments" translatable="yes">A time tracking application</property>
<property name="website">https://gtimelog.org/</property>
<property name="authors">Marius Gedminas
diff --git a/src/gtimelog/help/C/figures/gtimelog.png b/src/gtimelog/help/C/figures/gtimelog.png
deleted file mode 100644
index b59b1fa..0000000
--- a/src/gtimelog/help/C/figures/gtimelog.png
+++ /dev/null
Binary files differ
diff --git a/src/gtimelog/help/C/index.page b/src/gtimelog/help/C/index.page
deleted file mode 100644
index 79a524d..0000000
--- a/src/gtimelog/help/C/index.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:its="http://www.w3.org/2005/11/its"
- type="guide" id="index">
-
- <info>
- <title type="link">Time Log</title>
- <title type="text">Time Log</title>
- <revision pkgversion="0.10" date="2015-09-09" status="review"/>
-
- <credit type="author">
- <name>Marius Gedminas</name>
- <email its:translate="no">marius@gedmin.as</email>
- <years>2015</years>
- </credit>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
- </info>
-
- <title>
- <media type="image" mime="image/png" src="figures/gtimelog.png"
- its:translate="no"/>
- Time Log
- </title>
-
-</page>
diff --git a/src/gtimelog/help/C/legal.xml b/src/gtimelog/help/C/legal.xml
deleted file mode 100644
index 93a15e0..0000000
--- a/src/gtimelog/help/C/legal.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<license xmlns="http://projectmallard.org/1.0/"
- href="https://creativecommons.org/licenses/by-sa/3.0/">
-
- <p>This work is licensed under a
- <link href="https://creativecommons.org/licenses/by-sa/3.0/">Creative Commons
- Attribution-ShareAlike 3.0 Unported License</link>.</p>
-
-</license>
diff --git a/src/gtimelog/help/C/shortcuts.page b/src/gtimelog/help/C/shortcuts.page
deleted file mode 100644
index 2c79071..0000000
--- a/src/gtimelog/help/C/shortcuts.page
+++ /dev/null
@@ -1,195 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:ui="http://projectmallard.org/ui/1.0"
- xmlns:its="http://www.w3.org/2005/11/its"
- type="task"
- id="shortcuts">
-
- <info>
- <link type="guide" xref="index" group="#first"/>
- <revision pkgversion="0.10" date="2015-09-09" status="review"/>
-
- <credit type="author">
- <name>Marius Gedminas</name>
- <email its:translate="no">marius@gedmin.as</email>
- <years>2015</years>
- </credit>
-
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
-
- <desc>Keyboard shortcuts.</desc>
- </info>
-
- <title>Keyboard Shortcuts</title>
-
- <section id="time-navigation-shortcuts">
- <title>Time navigation shortcuts</title>
-
- <table rules="rows" frame="top bottom" ui:expanded="true">
- <thead>
- <tr>
- <td><p>Action</p></td>
- <td><p>Keyboard Shortcut</p></td>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><p>Go back in time</p></td>
- <td><p><keyseq><key>Alt</key><key>Left</key></keyseq></p></td>
- </tr>
- <tr>
- <td><p>Go forward in time</p></td>
- <td><p><keyseq><key>Alt</key><key>Right</key></keyseq></p></td>
- </tr>
- <tr>
- <td><p>Go back to today</p></td>
- <td><p><keyseq><key>Alt</key><key>Home</key></keyseq></p></td>
- </tr>
- </tbody>
- </table>
- </section>
-
- <section id="detail-level-shortcuts">
- <title>Detail level shortcuts</title>
-
- <table rules="rows" frame="top bottom" ui:expanded="true">
- <thead>
- <tr>
- <td><p>Action</p></td>
- <td><p>Keyboard Shortcut</p></td>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><p>View chronological task list</p></td>
- <td><p><keyseq><key>Alt</key><key>1</key></keyseq></p></td>
- </tr>
- <tr>
- <td><p>View time spent on each task</p></td>
- <td><p><keyseq><key>Alt</key><key>2</key></keyseq></p></td>
- </tr>
- <tr>
- <td><p>View time spent on each task category</p></td>
- <td><p><keyseq><key>Alt</key><key>3</key></keyseq></p></td>
- </tr>
- </tbody>
- </table>
- </section>
-
- <section id="time-range-shortcuts">
- <title>Time range shortcuts</title>
-
- <table rules="rows" frame="top bottom" ui:expanded="true">
- <thead>
- <tr>
- <td><p>Action</p></td>
- <td><p>Keyboard Shortcut</p></td>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><p>View one day</p></td>
- <td><p><keyseq><key>Alt</key><key>4</key></keyseq></p></td>
- </tr>
- <tr>
- <td><p>View one week</p></td>
- <td><p><keyseq><key>Alt</key><key>5</key></keyseq></p></td>
- </tr>
- <tr>
- <td><p>View one month</p></td>
- <td><p><keyseq><key>Alt</key><key>6</key></keyseq></p></td>
- </tr>
- </tbody>
- </table>
- </section>
-
- <section id="menu-shortcuts">
- <title>Menu shortcuts</title>
-
- <table rules="rows" frame="top bottom" ui:expanded="true">
- <thead>
- <tr>
- <td><p>Action</p></td>
- <td><p>Keyboard Shortcut</p></td>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><p>Show/hide task pane</p></td>
- <td><p><keyseq><key>F9</key></keyseq></p></td>
- </tr>
- <tr>
- <td><p>Open action menu</p></td>
- <td><p><keyseq><key>F10</key></keyseq></p></td>
- </tr>
- </tbody>
- </table>
- </section>
-
- <section id="action-shortcuts">
- <title>Action shortcuts</title>
-
- <table rules="rows" frame="top bottom" ui:expanded="true">
- <thead>
- <tr>
- <td><p>Action</p></td>
- <td><p>Keyboard Shortcut</p></td>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><p>Edit task log</p></td>
- <td><p><keyseq><key>Ctrl</key><key>E</key></keyseq></p></td>
- </tr>
- <tr>
- <td><p>Edit task list</p></td>
- <td><p><keyseq><key>Ctrl</key><key>T</key></keyseq></p></td>
- </tr>
- <tr>
- <td><p>Help</p></td>
- <td><p><keyseq><key>F1</key></keyseq></p></td>
- </tr>
- <tr>
- <td><p>Preferences</p></td>
- <td><p><keyseq><key>Ctrl</key><key>P</key></keyseq></p></td>
- </tr>
- <tr>
- <td><p>Quit</p></td>
- <td><p><keyseq><key>Ctrl</key><key>Q</key></keyseq></p></td>
- </tr>
- </tbody>
- </table>
- </section>
-
- <section id="report-shortcuts">
- <title>Report shortcuts</title>
-
- <p>You can continue to use <link
- xref="shortcuts#time-navigation-shortcuts">time navigation</link> and
- <link xref="shortcuts#time-range-shortcuts">time range</link>
- shortcuts while in report mode.</p>
-
- <table rules="rows" frame="top bottom" ui:expanded="true">
- <thead>
- <tr>
- <td><p>Action</p></td>
- <td><p>Keyboard Shortcut</p></td>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><p>Switch to report mode</p></td>
- <td><p><keyseq><key>Ctrl</key><key>D</key></keyseq></p></td>
- </tr>
- <tr>
- <td><p>Send report via email</p></td>
- <td><p><keyseq><key>Ctrl</key><key>Enter</key></keyseq></p></td>
- </tr>
- <tr>
- <td><p>Return to task entry mode</p></td>
- <td><p><keyseq><key>Esc</key></keyseq></p></td>
- </tr>
- </tbody>
- </table>
- </section>
-
-</page>
diff --git a/src/gtimelog/main.py b/src/gtimelog/main.py
index f1b5072..4a57f30 100644
--- a/src/gtimelog/main.py
+++ b/src/gtimelog/main.py
@@ -95,10 +95,6 @@ else:
mark_time("gtimelog imports done")
-# When the app is properly installed, use HELP_URI = 'help:gtimelog'
-HELP_URI = ''
-HELP_DIR = os.path.abspath(os.path.join(HERE, 'help'))
-
UI_DIR = HERE
if (Gtk.MAJOR_VERSION, Gtk.MINOR_VERSION) < (3, 12):
@@ -109,6 +105,7 @@ else:
PREFERENCES_UI_FILE = os.path.join(UI_DIR, 'preferences.ui')
ABOUT_DIALOG_UI_FILE = os.path.join(UI_DIR, 'about.ui')
+SHORTCUTS_UI_FILE = os.path.join(UI_DIR, 'shortcuts.ui')
MENUS_UI_FILE = os.path.join(UI_DIR, 'menus.ui')
CSS_FILE = os.path.join(UI_DIR, 'gtimelog.css')
LOCALE_DIR = os.path.join(UI_DIR, 'locale')
@@ -324,8 +321,18 @@ class Application(Gtk.Application):
class Actions(object):
+ actions = [
+ 'preferences',
+ 'shortcuts',
+ 'about',
+ 'quit',
+ 'edit-log',
+ 'edit-tasks',
+ 'refresh-tasks',
+ ]
+
def __init__(self, app):
- for action_name in ['preferences', 'help', 'about', 'quit', 'edit-log', 'edit-tasks', 'refresh-tasks']:
+ for action_name in self.actions:
action = Gio.SimpleAction.new(action_name, None)
action.connect('activate', getattr(app, 'on_' + action_name.replace('-', '_')))
app.add_action(action)
@@ -396,9 +403,10 @@ class Application(Gtk.Application):
screen, css, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
mark_time("CSS loaded")
- builder = Gtk.Builder.new_from_file(MENUS_UI_FILE)
- self.set_app_menu(builder.get_object('app_menu'))
- mark_time("menus loaded")
+ if Gtk.Settings.get_default().get_property('gtk-shell-shows-app-menu'):
+ builder = Gtk.Builder.new_from_file(MENUS_UI_FILE)
+ self.set_app_menu(builder.get_object('app_menu'))
+ mark_time("menus loaded")
self.actions = self.Actions(self)
@@ -419,7 +427,7 @@ class Application(Gtk.Application):
self.set_accels_for_action("win.go-home", ["<Alt>Home"])
self.set_accels_for_action("app.edit-log", ["<Primary>E"])
self.set_accels_for_action("app.edit-tasks", ["<Primary>T"])
- self.set_accels_for_action("app.help", ["F1"])
+ self.set_accels_for_action("app.shortcuts", ["<Primary>question"])
self.set_accels_for_action("app.preferences", ["<Primary>P"])
self.set_accels_for_action("app.quit", ["<Primary>Q"])
self.set_accels_for_action("win.report", ["<Primary>D"])
@@ -468,13 +476,11 @@ class Application(Gtk.Application):
if not os.path.exists(filename):
open(filename, 'a').close()
- def on_help(self, action, parameter):
- if HELP_URI:
- uri = HELP_URI
- else:
- filename = os.path.join(HELP_DIR, 'C', 'index.page')
- uri = 'ghelp:' + GLib.filename_to_uri(filename, None).partition(':')[-1]
- Gtk.show_uri(None, uri, Gdk.CURRENT_TIME)
+ def on_shortcuts(self, action, parameter):
+ builder = Gtk.Builder.new_from_file(SHORTCUTS_UI_FILE)
+ shortcuts_window = builder.get_object('shortcuts_window')
+ shortcuts_window.set_transient_for(self.get_active_window())
+ shortcuts_window.show_all()
def get_contributors(self):
contributors = []
@@ -500,11 +506,16 @@ class Application(Gtk.Application):
preferences.connect("response", lambda *args: preferences.destroy())
preferences.run()
+ def are_there_any_modals(self):
+ # Fix for https://github.com/gtimelog/gtimelog/issues/127
+ return any(window.get_modal()
+ for window in Gtk.Window.list_toplevels())
+
def do_activate(self):
mark_time("in app activate")
window = self.get_active_window()
if window is not None:
- if not window.is_active():
+ if not window.is_active() and not self.are_there_any_modals():
# If I don't hide the window before calling present(), GNOME
# Shell (on Wayland) ignores the presentation request:
# https://bugzilla.gnome.org/show_bug.cgi?id=756202 and
@@ -992,6 +1003,10 @@ class Window(Gtk.ApplicationWindow):
if self.editing_remote_tasks:
self.download_tasks()
self.editing_remote_tasks = False
+ # In case inotify magic fails, let's allow the user to refresh by
+ # switching focus.
+ self.check_reload()
+ self.check_reload_tasks()
def virtual_midnight_changed(self, *args):
if self.timelog:
@@ -1038,14 +1053,23 @@ class Window(Gtk.ApplicationWindow):
return (self.props.window.get_state() & MAXIMIZED_IN_ANY_WAY) != 0
def watch_file(self, filename, callback):
+ log.debug('adding watch on %s', filename)
gf = Gio.File.new_for_path(filename)
gfm = gf.monitor_file(Gio.FileMonitorFlags.NONE, None)
gfm.connect('changed', callback)
- self._watches[filename] = gfm # keep a reference so it doesn't get garbage collected
+ self._watches[filename] = (gfm, None) # keep a reference so it doesn't get garbage collected
+ if os.path.islink(filename):
+ realpath = os.path.join(os.path.dirname(filename), os.readlink(filename))
+ log.debug('%s is a symlink, adding a watch on %s', filename, realpath)
+ self._watches[filename] = (gfm, realpath)
+ if realpath not in self._watches: # protect against infinite loops
+ self.watch_file(realpath, callback)
def unwatch_file(self, filename):
- if filename in self._watches:
- del self._watches[filename]
+ # watch_file(a_symlink, callback) creates multiple watches, so be sure to unwatch them all
+ while filename in self._watches:
+ log.debug('removing watch on %s', filename)
+ filename = self._watches.pop(filename)[1]
def get_last_time(self):
if self.timelog is None:
@@ -1296,12 +1320,14 @@ class Window(Gtk.ApplicationWindow):
# systems/OSes don't ever send it, react to other events after a
# short delay, so we wouldn't have to reload the file more than
# once.
+ log.debug('watch on %s reports %s', file.get_path(), event_type.value_nick.upper())
if event_type == Gio.FileMonitorEvent.CHANGES_DONE_HINT:
self.check_reload()
else:
GLib.timeout_add_seconds(1, self.check_reload)
def on_tasks_file_changed(self, monitor, file, other_file, event_type):
+ log.debug('watch on %s reports %s', file.get_path(), event_type.value_nick.upper())
if event_type == Gio.FileMonitorEvent.CHANGES_DONE_HINT:
self.check_reload_tasks()
else:
diff --git a/src/gtimelog/menus.ui b/src/gtimelog/menus.ui
index 109cbc9..a96b117 100644
--- a/src/gtimelog/menus.ui
+++ b/src/gtimelog/menus.ui
@@ -5,11 +5,9 @@
<attribute name="label" translatable="yes">Preferences</attribute>
<attribute name="action">app.preferences</attribute>
</item>
- </section>
- <section>
<item>
- <attribute name="label" translatable="yes">Help</attribute>
- <attribute name="action">app.help</attribute>
+ <attribute name="label" translatable="yes">Keyboard Shortcuts</attribute>
+ <attribute name="action">app.shortcuts</attribute>
</item>
<item>
<attribute name="label" translatable="yes">About</attribute>
@@ -43,6 +41,20 @@
<attribute name="action">win.report</attribute>
</item>
</section>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">Preferences</attribute>
+ <attribute name="action">app.preferences</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Keyboard Shortcuts</attribute>
+ <attribute name="action">app.shortcuts</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">About Time Log</attribute>
+ <attribute name="action">app.about</attribute>
+ </item>
+ </section>
</menu>
<menu id="view_menu">
<section>
diff --git a/src/gtimelog/po/POTFILES.in b/src/gtimelog/po/POTFILES.in
index 3bd58be..cb95138 100644
--- a/src/gtimelog/po/POTFILES.in
+++ b/src/gtimelog/po/POTFILES.in
@@ -1,7 +1,8 @@
[encoding: UTF-8]
-gtimelog.desktop.in
-src/gtimelog/main.py
-[type: gettext/glade]src/gtimelog/about.ui
-[type: gettext/glade]src/gtimelog/gtimelog.ui
-[type: gettext/glade]src/gtimelog/preferences.ui
-[type: gettext/glade]src/gtimelog/menus.ui
+../../gtimelog.desktop.in
+main.py
+[type: gettext/glade]about.ui
+[type: gettext/glade]gtimelog.ui
+[type: gettext/glade]preferences.ui
+[type: gettext/glade]menus.ui
+[type: gettext/glade]shortcuts.ui
diff --git a/src/gtimelog/po/en.po b/src/gtimelog/po/en.po
index fac9711..b7fc322 100644
--- a/src/gtimelog/po/en.po
+++ b/src/gtimelog/po/en.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gtimelog 0.10.dev0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-10-07 20:45+0300\n"
+"POT-Creation-Date: 2018-11-02 18:07+0200\n"
"PO-Revision-Date: 2015-09-04 10:53+0300\n"
"Last-Translator: Marius Gedminas <marius@gedmin.as>\n"
"Language-Team: <marius@gedmin.as>\n"
@@ -28,6 +28,12 @@ msgstr ""
msgid "{0} h {1} min"
msgstr ""
+#, python-format
+msgid ""
+"Authentication is required for \"%s\"\n"
+"You need a username and a password to access %s"
+msgstr ""
+
msgid "Show version number and exit"
msgstr ""
@@ -210,7 +216,7 @@ msgstr ""
msgid "Unable to configure translations: no locale.bindtextdomain()"
msgstr ""
-msgid "Copyright © 2004–2017 Marius Gedminas and contributors."
+msgid "Copyright © 2004–2018 Marius Gedminas and contributors."
msgstr ""
msgid "A time tracking application"
@@ -285,7 +291,7 @@ msgstr ""
msgid "Nickname used in the Subject line"
msgstr ""
-msgid "Help"
+msgid "Keyboard Shortcuts"
msgstr ""
msgid "About"
@@ -306,6 +312,9 @@ msgstr ""
msgid "Report..."
msgstr ""
+msgid "About Time Log"
+msgstr ""
+
msgid "Detail level"
msgstr ""
@@ -332,3 +341,115 @@ msgstr ""
msgid "Filter"
msgstr ""
+
+msgctxt "shortcuts window"
+msgid "Entry"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Detail level"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Full chronological list"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Group by description"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Group by category"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Time range"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Day view"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Week view"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Month view"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Time navigation"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Go back in time"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Go forward in time"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Go back to today"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "General"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Menu"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Keyboard shortcuts"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Toggle search bar"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Edit task log"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Preferences"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Quit"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Task pane"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Toggle task pane"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Edit task list"
+msgstr ""
+
+msgctxt "shortcuts window"
+msgid "Reports"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Reporting"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Switch to report mode"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Send report via email"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Return to task entry mode"
+msgstr ""
diff --git a/src/gtimelog/po/gtimelog.pot b/src/gtimelog/po/gtimelog.pot
index 450d325..9140dee 100644
--- a/src/gtimelog/po/gtimelog.pot
+++ b/src/gtimelog/po/gtimelog.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-10-07 20:46+0300\n"
+"POT-Creation-Date: 2018-11-02 18:07+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -27,6 +27,12 @@ msgstr ""
msgid "{0} h {1} min"
msgstr ""
+#, python-format
+msgid ""
+"Authentication is required for \"%s\"\n"
+"You need a username and a password to access %s"
+msgstr ""
+
msgid "Show version number and exit"
msgstr ""
@@ -209,7 +215,7 @@ msgstr ""
msgid "Unable to configure translations: no locale.bindtextdomain()"
msgstr ""
-msgid "Copyright © 2004–2017 Marius Gedminas and contributors."
+msgid "Copyright © 2004–2018 Marius Gedminas and contributors."
msgstr ""
msgid "A time tracking application"
@@ -284,7 +290,7 @@ msgstr ""
msgid "Nickname used in the Subject line"
msgstr ""
-msgid "Help"
+msgid "Keyboard Shortcuts"
msgstr ""
msgid "About"
@@ -305,6 +311,9 @@ msgstr ""
msgid "Report..."
msgstr ""
+msgid "About Time Log"
+msgstr ""
+
msgid "Detail level"
msgstr ""
@@ -331,3 +340,115 @@ msgstr ""
msgid "Filter"
msgstr ""
+
+msgctxt "shortcuts window"
+msgid "Entry"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Detail level"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Full chronological list"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Group by description"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Group by category"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Time range"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Day view"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Week view"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Month view"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Time navigation"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Go back in time"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Go forward in time"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Go back to today"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "General"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Menu"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Keyboard shortcuts"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Toggle search bar"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Edit task log"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Preferences"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Quit"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Task pane"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Toggle task pane"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Edit task list"
+msgstr ""
+
+msgctxt "shortcuts window"
+msgid "Reports"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Reporting"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Switch to report mode"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Send report via email"
+msgstr ""
+
+msgctxt "shortcut window"
+msgid "Return to task entry mode"
+msgstr ""
diff --git a/src/gtimelog/po/lt.po b/src/gtimelog/po/lt.po
index 523f091..a9219dd 100644
--- a/src/gtimelog/po/lt.po
+++ b/src/gtimelog/po/lt.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gtimelog 0.10.dev0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-10-07 20:45+0300\n"
+"POT-Creation-Date: 2018-11-02 18:07+0200\n"
"PO-Revision-Date: 2015-09-04 10:53+0300\n"
"Last-Translator: Marius Gedminas <marius@gedmin.as>\n"
"Language-Team: <marius@gedmin.as>\n"
@@ -29,6 +29,14 @@ msgstr "Sekti kasdieninus darbus"
msgid "{0} h {1} min"
msgstr "{0} val {1} min"
+#, python-format
+msgid ""
+"Authentication is required for \"%s\"\n"
+"You need a username and a password to access %s"
+msgstr ""
+"Reikia prisijungti prie \"%s\"\n"
+"Reikia naudotojo vardo ir slaptažodžio, kad pasiektumėte %s"
+
msgid "Show version number and exit"
msgstr "Rodyti programos versiją ir išeiti"
@@ -215,8 +223,8 @@ msgstr "Uždaryti"
msgid "Unable to configure translations: no locale.bindtextdomain()"
msgstr "Nepavyko įjungti vertimų: nėra locale.bindtextdomain()"
-msgid "Copyright © 2004–2017 Marius Gedminas and contributors."
-msgstr "Autorinės teisės © 2004–2017 Marius Gedminas ir kiti."
+msgid "Copyright © 2004–2018 Marius Gedminas and contributors."
+msgstr "Autorinės teisės © 2004–2018 Marius Gedminas ir kiti."
msgid "A time tracking application"
msgstr "Programa darbo laiko sekimui"
@@ -290,8 +298,8 @@ msgstr "Kam"
msgid "Nickname used in the Subject line"
msgstr "Trumpas vardas temos laukeliui"
-msgid "Help"
-msgstr "Žinynas"
+msgid "Keyboard Shortcuts"
+msgstr "Trumpiniai"
msgid "About"
msgstr "Apie"
@@ -311,6 +319,9 @@ msgstr "Atnaujinti užduotis"
msgid "Report..."
msgstr "Ataskaita..."
+msgid "About Time Log"
+msgstr "Apie Laiko žurnalą"
+
msgid "Detail level"
msgstr "Detalumas"
@@ -338,6 +349,125 @@ msgstr "Mėnuo"
msgid "Filter"
msgstr "Filtruoti"
+msgctxt "shortcuts window"
+msgid "Entry"
+msgstr "Įvedimas"
+
+msgctxt "shortcut window"
+msgid "Detail level"
+msgstr "Detalumas"
+
+msgctxt "shortcut window"
+msgid "Full chronological list"
+msgstr "Chronologinis"
+
+msgctxt "shortcut window"
+msgid "Group by description"
+msgstr "Grupuoti pagal pavadinimą"
+
+msgctxt "shortcut window"
+msgid "Group by category"
+msgstr "Grupuoti pagal kategoriją"
+
+msgctxt "shortcut window"
+msgid "Time range"
+msgstr "Laiko intervalas"
+
+msgctxt "shortcut window"
+msgid "Day view"
+msgstr "Diena"
+
+msgctxt "shortcut window"
+msgid "Week view"
+msgstr "Savaitė"
+
+msgctxt "shortcut window"
+msgid "Month view"
+msgstr "Mėnuo"
+
+msgctxt "shortcut window"
+msgid "Time navigation"
+msgstr "Navigacija"
+
+msgctxt "shortcut window"
+msgid "Go back in time"
+msgstr "Eiti atgal laike"
+
+msgctxt "shortcut window"
+msgid "Go forward in time"
+msgstr "Eiti pirmyn laike"
+
+msgctxt "shortcut window"
+msgid "Go back to today"
+msgstr "Grįžti į šiandieną"
+
+msgctxt "shortcut window"
+msgid "General"
+msgstr "Bendri"
+
+msgctxt "shortcut window"
+msgid "Menu"
+msgstr "Meniu"
+
+msgctxt "shortcut window"
+msgid "Keyboard shortcuts"
+msgstr "Trumpiniai"
+
+msgctxt "shortcut window"
+msgid "Toggle search bar"
+msgstr "Rodyti/slėpti paieškos lauką"
+
+msgctxt "shortcut window"
+msgid "Edit task log"
+msgstr "Taisyti žurnalą"
+
+msgctxt "shortcut window"
+msgid "Preferences"
+msgstr "Nustatymai"
+
+msgctxt "shortcut window"
+msgid "Quit"
+msgstr "Užverti programą"
+
+msgctxt "shortcut window"
+msgid "Task pane"
+msgstr "Užduočių skiltis"
+
+msgctxt "shortcut window"
+msgid "Toggle task pane"
+msgstr "Rodyti/slėpti užduočių skiltį"
+
+msgctxt "shortcut window"
+msgid "Edit task list"
+msgstr "Tvarkyti užduotis"
+
+msgctxt "shortcuts window"
+msgid "Reports"
+msgstr "Ataskaitos"
+
+msgctxt "shortcut window"
+msgid "Reporting"
+msgstr "Ataskaitos"
+
+msgctxt "shortcut window"
+msgid "Switch to report mode"
+msgstr "Ataskaitų režimas"
+
+msgctxt "shortcut window"
+msgid "Send report via email"
+msgstr "Siųsti el. paštu"
+
+msgctxt "shortcut window"
+msgid "Return to task entry mode"
+msgstr "Grįžti į įvedimo režimą"
+
+#~ msgid "Help"
+#~ msgstr "Žinynas"
+
+#~ msgctxt "shortcut window"
+#~ msgid "Help"
+#~ msgstr "Žinynas"
+
#~ msgid "Total for {0}: {1}"
#~ msgstr "Iš viso {0}: {1}"
diff --git a/src/gtimelog/shortcuts.ui b/src/gtimelog/shortcuts.ui
new file mode 100644
index 0000000..6512ee7
--- /dev/null
+++ b/src/gtimelog/shortcuts.ui
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.17 -->
+
+ <object class="GtkShortcutsWindow" id="shortcuts_window">
+ <property name="modal">True</property>
+ <child>
+ <object class="GtkShortcutsSection">
+ <property name="visible">True</property>
+ <property name="section-name">entry</property>
+ <property name="title" translatable="yes" context="shortcuts window">Entry</property>
+ <child>
+ <object class="GtkShortcutsGroup">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes" context="shortcut window">Detail level</property>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;1</property>
+ <property name="title" translatable="yes" context="shortcut window">Full chronological list</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;2</property>
+ <property name="title" translatable="yes" context="shortcut window">Group by description</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;3</property>
+ <property name="title" translatable="yes" context="shortcut window">Group by category</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsGroup">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes" context="shortcut window">Time range</property>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;4</property>
+ <property name="title" translatable="yes" context="shortcut window">Day view</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;5</property>
+ <property name="title" translatable="yes" context="shortcut window">Week view</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;6</property>
+ <property name="title" translatable="yes" context="shortcut window">Month view</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsGroup">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes" context="shortcut window">Time navigation</property>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;Left</property>
+ <property name="title" translatable="yes" context="shortcut window">Go back in time</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;Right</property>
+ <property name="title" translatable="yes" context="shortcut window">Go forward in time</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;Home</property>
+ <property name="title" translatable="yes" context="shortcut window">Go back to today</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsGroup">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes" context="shortcut window">General</property>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">F10</property>
+ <property name="title" translatable="yes" context="shortcut window">Menu</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;primary&gt;question</property>
+ <property name="title" translatable="yes" context="shortcut window">Keyboard shortcuts</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;primary&gt;F</property>
+ <property name="title" translatable="yes" context="shortcut window">Toggle search bar</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;primary&gt;E</property>
+ <property name="title" translatable="yes" context="shortcut window">Edit task log</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;primary&gt;P</property>
+ <property name="title" translatable="yes" context="shortcut window">Preferences</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;primary&gt;Q</property>
+ <property name="title" translatable="yes" context="shortcut window">Quit</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsGroup">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes" context="shortcut window">Task pane</property>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">F9</property>
+ <property name="title" translatable="yes" context="shortcut window">Toggle task pane</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;primary&gt;T</property>
+ <property name="title" translatable="yes" context="shortcut window">Edit task list</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsSection">
+ <property name="visible">True</property>
+ <property name="section-name">report</property>
+ <property name="title" translatable="yes" context="shortcuts window">Reports</property>
+ <child>
+ <object class="GtkShortcutsGroup">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes" context="shortcut window">Time range</property>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;4</property>
+ <property name="title" translatable="yes" context="shortcut window">Day view</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;5</property>
+ <property name="title" translatable="yes" context="shortcut window">Week view</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;6</property>
+ <property name="title" translatable="yes" context="shortcut window">Month view</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsGroup">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes" context="shortcut window">Time navigation</property>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;Left</property>
+ <property name="title" translatable="yes" context="shortcut window">Go back in time</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;Right</property>
+ <property name="title" translatable="yes" context="shortcut window">Go forward in time</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;alt&gt;Home</property>
+ <property name="title" translatable="yes" context="shortcut window">Go back to today</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsGroup">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes" context="shortcut window">Reporting</property>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;primary&gt;D</property>
+ <property name="title" translatable="yes" context="shortcut window">Switch to report mode</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">&lt;primary&gt;Return</property>
+ <property name="title" translatable="yes" context="shortcut window">Send report via email</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="accelerator">Escape</property>
+ <property name="title" translatable="yes" context="shortcut window">Return to task entry mode</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>