Commit graph

139 commits

Author SHA1 Message Date
Igor Kushnir 60bc05218f Add input phrase's punctuation suffix to alts
Preferences::sanitizeInputPhrase() transforms an input phrase by
removing its whitespace/punctuation prefix and suffix. Translating a
phrase from X11 primary selection or from clipboard, via mouse-over or
from the command line results in such sanitization. This is useful when
a punctuation mark or a space is selected accidentally alongside a word.
This sanitization can be undesirable, however, when an abbreviated word
is selected. For example: "etc.", "e.g.", "i.e.".

This commit implements searching for the input word with the punctuation
suffix preserved as an alternative form of the sanitized word to show
articles for both. For example, when the word "etc." is translated from
the clipboard, both "ETC" and "etc." articles are displayed.

The punctuation suffix is preserved when the word is passed from the
scan popup to the main window and when the translate line text is
refreshed (e.g. when the current group is changed). The suffix is not
stored in history and favorites (doing so would require file format
changes and possibly substantial code changes, this can be implemented
later if need be).

Trim the input phrase once in ArticleNetworkAccessManager::getResource()
instead of verbose trimming in multiple places in
ArticleMaker::makeDefinitionFor().

Closes #1350.
2021-06-17 12:06:36 +03:00
Igor Kushnir 61eb4e08fe Add options to limit input phrase length
When a long text is accidentally selected or copied while the scan popup
is on, Goldendict spends a lot of CPU time to gradually create a
"No translation..." article. When translation of huge (e.g. 15 MB) text
from the clipboard is (accidentally) requested, Goldendict freezes for a
while. Turning the added input phrase limit option on eliminates this
waste of the CPU time.

I have implemented these options primarily for selection and clipboard,
but they also affect mouse-over translation on Windows and command line
translation requests. This is mostly because I did not bother to limit
the options' scope. I guess hovering over an extremely long text without
spaces (e.g. Base64-encoded) could cause the same performance issue on
Windows. The command-line translation could be requested from a script
that integrates Goldendict with some other application, from which long
text could be sent for translation by accident.

I hope that the default value of 200 characters will be sufficient for
just about any real-world user input in any language. The option is on
by default, because the default length limit is generous and any longer
text is unlikely to be sent for translation intentionally. My personal
preference for the input phrase length limit is 100 symbols.

ArticleView::pasteTriggered() didn't call QString::simplified() on the
text retrieved from the clipboard. I assumed this was an oversight, so
now it *is* called - indirectly, via Preferences::sanitizeInputPhrase().
2020-11-13 17:44:38 +02:00
Abs62 353ea1793e ScanPopup: Normalize whitespaces while translate on clipboard change 2020-03-11 22:18:33 +03:00
Igor Kushnir 462218d662 Linux-specific: Qt::Dialog -> Qt::Window pinned scan popup flags
There is a regression since Qt 5.12.1 that forces the pinned scan popup
window to be always on top of the main window on Linux/X11 because of
its Qt::Dialog window flag. The same issue is present in Qt 4.
The Qt regression is reported as QTBUG-74309, but chances of it being
fixed any time soon seem slim.

The documentation for Qt::Dialog window flag states that it causes a
window to be decorated as a dialog (typically no maximize or minimize
buttons in the title bar). I suppose adding these buttons to
the scan popup's title bar is not an issue.

As a bonus, the Qt::Dialog flag prevented scan popup window tiling when
moving toward the screen edge in Xfce. It works perfectly now.
2019-05-13 14:24:14 +03:00
Igor Kushnir ec96d6ac5a Allow shrinking scan popup's toolbar height
Before this commit, when group combobox was visible, the Alt+- shortcut
reduced the heights of group combobox and translate line in the main
window, but not in scan popup. These UI elements in scan popup did not
become lower than at the time scan popup was constructed.

Applying the solution from the main window fixes this bug (#1108).
2019-01-29 15:43:18 +02:00
Igor Kushnir a9fc823c46 Avoid duplicate currentGroupChanged() connection
Before this change ScanPopup::applyWordsZoomLevel() was called before
the primary connection to ScanPopup::currentGroupChanged() in
ScanPopup's constructor. This meant that disconnect() had no effect and
connect() established the first connection during the first call to
ScanPopup::applyWordsZoomLevel(). This caused 2 issues:
  1. Since the connection happened before the filling of ui.groupList
in ScanPopup's constructor, the current group in scan popup was always
"All" on Goldendict start.
  2. Since the connection was not unique, the slot was connected twice
to the same signal, and it was actually called twice.

The bug was introduced in 92e8c85eec.
2019-01-28 14:54:32 +02:00
Abs62 92e8c85eec Fix behavior while words list font resizing (issue #1109) 2019-01-26 22:11:27 +03:00
Igor Kushnir 3bf7aad1f7 Add a shortcut to focus scan popup's article view
The article view focus is necessary to navigate a word definition via
keyboard rather than mouse. The shortcut - Ctrl+N - is the same as
the one in the main window for the corresponding action.
2018-05-16 14:54:20 +03:00
Abs62 0a8599d9b1 Fix warning in scanpopup.cc while compilation under Windows/MacOS 2018-04-17 20:52:39 +03:00
Igor Kushnir 5c74494935 Linux-specific: Add an option to disable scan popup inside Goldendict
When scan popup is configured to appear without any key modifiers
pressed and is active on X11, it interferes with selecting text inside
the scan popup window (or inside the main window if "Send translated
word to main window" option is enabled). It also makes searching text
inside article definition impossible - in the main window and
even more so in the scan popup window.

However, when scan popup is configured to appear only when some keys are
pressed, or when the scan flag feature is enabled, it may work fine
inside Goldendict windows.

It is possible to automatically decide whether to show scan popup when
selection or clipboard inside Goldendict changes. But such logic might
be unsuitable for some use cases. For example, invoking scan popup by
selecting article definition text in the main window works fine.
Therefore this commit makes ignoring selection and clipboard changes
inside Goldendict itself optional. This commit implements one of two
feature requests in issue #606.

This new option could have effect on non-X11 platforms if the hidden
trackClipboardChanges option is enabled. But it is much less useful on
these platforms because scan popup without key modifiers is unusable
there (at least under Windows). Let us show and use the option only on
X11 to avoid cluttering Preferences UI on other platforms.
2018-04-17 20:13:25 +03:00
Igor Kushnir 15dfdee49f Allow customizing unpinned scan popup window flags on X11 with Qt5
My tests in many desktop environments and window managers indicate that
no single configuration works perfectly in all environments. There are
also behavior differences between Qt::Popup and Qt::Tool flags, which
are not exactly bugs, so I suppose users might subjectively prefer
different options.

Customizing the flags allows the user to prevent unpinned scan popup
window flickering with Qt5 on Linux. In a way adding these options fixes
issue #645, which is: the scan popup window blinks rapidly, barely
noticeably in some applications, such as Calibre ebook-viewer
and Chromium. In this case the scan popup window usually ends up hidden
when selection ends, unless it was finished with a jerk.

I have tested the new options in 9 desktop environments and window
managers: at least one configuration for each eliminates #645 and makes
the scan popup window work the same as with Qt4 in this regard:
the popup window remains visible, text in the popup's translation line
keeps up with the text selection in the external application,
and the selected text is being translated on the fly.

Moreover, for each tested DE/WM, at least one configuration makes
the scan popup window work perfectly as far as I am concerned.

This issue was partially worked around with a 200ms scan popup delay
timer in the recent commit 58e41fe3ce
for the duplicate issue #854. However the timer solution is incomplete
because it requires the user to select text quickly and without delays.
If global mouse selection does not change for 200ms while the left mouse
button is held down, the user will likely not see the scan popup when
(s)he finishes selection, and will have to try selecting again -
hopefully faster this time.

The 200ms delay is no longer critically important after this commit,
but it is still beneficial: the lookup query changes less often,
which in turn reduces article definition update frequency.
So the delay improves the UI (perhaps subjectively) and performance.
2018-04-15 19:46:35 +03:00
Igor Kushnir d530af7781 Qt5: disable an obsolete Qt4 X11 window focus workaround
I have verified in numerous desktop environments and window managers
that the workaround does not work with Qt5.
Let us disable it in Qt5 builds to prevent potential issues
and eliminate the small performance overhead.
2018-04-15 19:46:35 +03:00
Abs62 d65a1f7869 Save popup window configuration without it destroying 2018-03-27 21:23:48 +03:00
Igor Kushnir e5045860ef Make adding new audio player implementations easy
* add a new interface class AudioPlayerInterface;
* inherit a new proxy class Ffmpeg::AudioPlayer from it;
* partially switch ArlticleView to using the interface;
* expose MainWindow's AudioPlayerInterface instance to all ArticleView
  instances;
* add a new AudioPlayerFactory class responsible for creating instances
  of concrete classes derived from AudioPlayerInterface depending on
  relevant Config::Preferences values;
* increase minimum supported Qt version from 4.5 to 4.6 in README
  in order to use QScopedPointer introduced in Qt 4.6.
2018-03-24 21:31:48 +02:00
Abs62 77c9a4c3e2 Fix "Add to Favorites" icon changing 2017-11-07 17:46:59 +03:00
Abs62 1824d9ab02 Change "Add to Favorites" icon if headword is already presented in Favorites 2017-10-23 17:21:43 +03:00
Abs62 ecddc321b2 ScanPopup: Change font size for translate line and word list synchronously with main window 2017-07-14 16:02:21 +03:00
Abs62 a75dcfb7c5 ScanPopup: Add button to stay over all other windows (issue #659) 2017-07-13 18:00:19 +03:00
Abs62 58e41fe3ce Linux-specific: Small delay for show of popup window when selection changed (by Sun Wang) (issue #854) 2017-06-13 18:00:16 +03:00
Abs62 0999c86038 Linux-specific: Hide scan flag window when popup window is shown (by Ctrl+C+C) 2017-06-06 18:00:48 +03:00
sunwxg ad8008c37b Add scan popup flag
After select a word, show a flag window, click the flag to show
popup window.
2017-06-05 21:15:38 +08:00
Abs62 a6e51afa64 Add "Add to Favorites" button to scan popup window 2017-05-15 18:08:06 +03:00
Abs62 e982b69216 Add command line parameters "--group-name" and "--popup-group-name" 2017-03-10 17:15:10 +03:00
Abs62 c42be480f5 MacOS: Fix popup window in Qt 5.3 2014-10-03 15:30:49 +04:00
Abs62 b9666f7f9f Merge branch 'Original' into Qt4x5
Conflicts:
	bgl_babylon.cc
2014-05-12 18:10:26 +04:00
Abs62 e2b0a7f39c Mac-specific: Adjust code for Qt5 build 2014-05-12 17:53:13 +04:00
Abs62 4120213ee8 Rename "DPRINTF" and "FDPRINTF" debug macro 2014-05-11 01:02:31 +04:00
Abs62 9c319da834 Merge branch 'Original' into Qt4x5
Conflicts:
	dictserver.cc
2014-05-10 00:05:07 +04:00
Abs62 c8f0354227 Scan popup: Fix filling of suggestion list when muted dictionaries are presented 2014-05-09 23:27:50 +04:00
Abs62 10532279b1 Merge branch 'Original' into Qt4x5
Conflicts:
	article_netmgr.cc
	mainwindow.cc
2014-04-23 18:16:06 +04:00
Abs62 9ad0d5f985 Implement full-text search 2014-04-16 20:18:28 +04:00
Abs62 4cf35cc7e3 Merge branch 'Original' into Qt4x5
Conflicts:
	hotkeywrapper.hh
	mainwindow.cc
	mainwindow.hh
2014-04-11 19:29:56 +04:00
Abs62 b6a5beb2c2 Adjust back/forward buttons icon for right-to-left window layout 2014-03-20 17:44:46 +04:00
Abs62 4bbe1aaee5 Merge branch 'Original' into Qt4x5
Conflicts:
	scanpopup.cc
2014-03-14 17:34:33 +04:00
Abs62 04524ba4e4 Mac-specific: Change window flags for scan popup window (issue #434) 2014-02-17 17:49:18 +04:00
Abs62 0fa4087b38 Merge branch 'Original' into Qt4x5
Conflicts:
	goldendict.pro
	mainwindow.cc
	zim.cc
	zipsounds.cc
2014-02-11 23:39:31 +04:00
Abs62 3495ba1816 Handle some touch screen gestures in scan popup window 2014-02-05 17:41:49 +04:00
Abs62 dbedf431fa Merge branch 'Original' into Qt4x5 2014-01-22 00:03:39 +04:00
Abs62 32a2cf55b9 Add config file option for track clipboard changes 2014-01-09 18:17:50 +04:00
Abs62 34271ecc1d Merge branch 'Temp' into Qt4x5
Conflicts:
	article_maker.cc
	article_netmgr.cc
	articleview.cc
	forvo.cc
	goldendict.pro
	hotkeywrapper.cc
	hunspell.cc
	mainwindow.cc
2013-12-18 19:09:48 +04:00
Abs62 444938a330 Fix logging to file UTF-8 encoded messages 2013-11-16 22:34:09 +04:00
Timon Wong 6ed3f5bec5 Merge branch 'master' into qt4x5 2013-06-16 15:54:05 +08:00
Tvangeste de2bf73e66 New interface preference: Context menu dictionaries limit
Controls both context menus, in the dictionary bar and in the article view.
Can be adjusted in Preferences -> Interface -> Context menu dictionaries limit.
By default, it is set to 20.
2013-06-11 20:31:01 +02:00
Timon Wong f0885d4c78 Merge branch 'master' into qt4x5
Conflicts:
	hotkeywrapper.cc
	xdxf2html.cc
2013-06-10 23:49:09 +08:00
Abs62 3bd82ef752 "Open dictionary folder" action in context menu (issue #344) 2013-06-09 17:31:57 +04:00
Timon Wong 8015841a1a Replace Q_WS_X11 -> HAVE_X11 2013-05-31 13:28:36 +08:00
Timon Wong d057752c74 Change Q_WS_MAC to Q_OS_MAC, Change Q_WS_WIN* to Q_OS_WIN* 2013-05-31 12:28:29 +08:00
Timon Wong ad4394d02b #212: Workaround for Qt5 changed behavior in QUrl::setPath() 2013-05-30 23:05:41 +08:00
Abs62 68df177056 Mac-specific: Implement scanning under Mac OS X (issue #129) 2013-04-10 17:31:44 +04:00
Abs62 db4bb635d1 Disable clipboard change tracking for Windows and MacOS 2013-04-05 16:21:01 +04:00
Abs62 13eb3fa503 Synchronize dicionary icons size in popup and main windows (issue #168) 2013-02-27 17:12:46 +04:00
Abs62 940de07908 Don't translate program name 2013-02-01 16:36:01 +04:00
Abs62 4e06a3612d Call tr() function for some strings (issue #195 again) 2013-02-01 00:18:40 +04:00
Tvangeste 2fa90cb55c Fixed #197: Sometimes the Scan Popup shows previous translation (Linux). 2013-01-29 23:04:18 +01:00
Tvangeste 3b7326e3be Fixed #194: Scan Popup window doesn't get the keyboard focus on Linux.
Tested and verified on recent Unity, Gnome, KDE, LXDE systems.
2013-01-29 22:30:24 +01:00
Tvangeste a89299c2e3 Revert "Use the same window flags for the scan window, on Win and Linux."
Unfortunately, the change didn't work properly on KDE systems.

This reverts commit 8a8c7cc7d7.
2013-01-28 13:19:11 +01:00
Tvangeste 8a8c7cc7d7 Use the same window flags for the scan window, on Win and Linux.
Previously, the scan popup used Qt::Popup flag on Linux, but this
flag is incompatible with the new translate box UI, esp. the
floating suggestion list, since in the Qt::Popup-styled windows
all the events go to the popup, hence the creation of additional
windows is problematic, and those new windows don't work properly
since they don't receive events.

Without this change, the scrolling of the suggestion list in the
Scan Popup's translate box is impossible.
2013-01-27 23:24:06 +01:00
Tvangeste ffa9f5778b Fixed #192: Dynamically adjust the suggestion list in the new UI. 2013-01-27 23:12:00 +01:00
Abs62 15f6f10f97 ScanPopup window header 2013-01-26 19:55:17 +04:00
Tvangeste 3258ad89f5 Fixed #191: New UI in the scan popup, replace 3 separate widgets with the translate box. 2013-01-25 16:42:44 +01:00
Abs62 4c8b12b9af "Back" and "Forward" buttons in scan popup window 2012-12-24 16:59:46 +04:00
Abs62 e6457a1e27 Call external editor for dictionaries 2012-11-28 23:32:37 +04:00
Abs62 259efae81c Update history when clicking links on page (issue #120) 2012-11-12 17:52:54 +04:00
Abs62 8e4b38400a Remove redundant spaces while translating clipboard 2012-10-01 16:43:32 +04:00
Abs62 ad8ddc8daf Add option for word selection by single mouse click 2012-09-26 17:59:48 +04:00
Abs62 3c2990bf23 Own muted dictionaries list for each group 2012-09-26 17:13:47 +04:00
Abs62 4c5e79c2b2 Add "Dictionary info" item to dictionary bar context menu 2012-09-25 17:13:35 +04:00
Abs62 09b9e9aa46 Win-specific: Show translation in popup window istead of sending word to GD main window while scanning GD main window 2012-09-24 17:20:58 +04:00
Abs62 44247c04c9 Add word to history via context menu from ScapPopup window 2012-09-16 14:30:14 +04:00
Abs62 305c9ed1b8 Show/hide optional parts of articles (DSL dictionaries only) 2012-09-16 14:19:47 +04:00
Abs62 e00415e4d2 Close popup menus when ScanPopup window closes 2012-09-12 18:18:16 +04:00
Abs62 535fe0d3e0 Update year in copyright notices. 2012-02-21 01:47:14 +04:00
Abs62 11561ac4af Large search history 2012-02-16 18:56:25 +04:00
Abs62 bd90b5368b Add translation of the word from command line 2011-11-16 17:02:56 +04:00
Abs62 9a1ceff5d8 1. Add button to scan popup window to send translated word into main window
2. Add option to use main window instead of scan popup window
2011-11-16 16:52:25 +04:00
Konstantin Isakov f65c98c8e1 Merge pull request #26 from Abs62/master
Improvements in scan popup functionality. Now it can work with Internet Explorer 9.
2011-07-29 19:47:54 -07:00
Abs62 a11774483d Move some checks from ScanPopup into MouseOver 2011-07-28 17:04:06 +04:00
Abs62 68c80f48b2 Some simplification and cleanup 2011-07-27 16:47:29 +04:00
Tvangeste 4163bce8a2 Various status bar related fixes:
* Status Bar now available for Scan Popup window as well.
* Fixed #13: Eliminated modal box when sound is not available:
  Instead of modal dialog box we now show the status bar message,
  with error icon, thus making it visible but not disruptive.
* Proper handling of status bar images.
* Styling of the status bar in both modes
  (in Mani Window and in Popup Window).
2011-07-14 22:11:57 +02:00
Tvangeste 39d8772153 added statusbar to the scan popup window 2011-07-14 10:17:59 +02:00
Abs62 a8589b39bf Improvements in scan popup functionality.
1. Add search word under cursor through IAccessibleEx interface and UI Automation technology.
2. Reorganize GoldenDict main program and scan libraries interaction to reduce influence to other programs.
3. Fix crash in scan libraries in IE9 protected mode.
2011-07-09 23:26:30 +04:00
Abs62 36e509a2ab Replace printf in code by a macro DPRINTF 2011-06-19 22:50:11 +04:00
Abs62 97a6d49221 Check scan popup modifiers in window message handler to avoid unneeded string handling 2011-06-17 16:15:41 +04:00
Julian Depetris Chauvin 84400e766a pin in popup setting is now remembered on restart. 2011-05-01 20:52:11 -03:00
Konstantin Isakov 92eceb8cad Change email from @users.berlios.de to @goldendict.org. 2010-12-09 15:31:50 +03:00
Konstantin Isakov 414e0336e6 Don't attempt to translate the same word in scanpopup that is shown there already.
This fixes repeated scanpopup triggerings under Windows.
2010-12-03 23:10:18 +03:00
Konstantin Isakov 953d9237a3 Update copyright to span to 2011.
Better early than late, this year is ending anyway.
2010-11-14 18:47:03 +03:00
Konstantin Isakov 621d842394 Use polling instead of mouse grab for scan popup. This should fix problems with Windows 7 and such. 2010-07-03 20:24:30 +04:00
Konstantin Isakov ab88fa4867 Drop the src/ directory. It's superfluous. 2010-05-15 16:42:18 +04:00
Renamed from src/scanpopup.cc (Browse further)