Krita Source Code Documentation
Loading...
Searching...
No Matches
KisQtWidgetsTweaker Class Reference

#include <KisQtWidgetsTweaker.h>

+ Inheritance diagram for KisQtWidgetsTweaker:

Classes

struct  Private
 

Public Member Functions

bool eventFilter (QObject *receiver, QEvent *event) override
 
 KisQtWidgetsTweaker (QObject *parent=nullptr)
 
 ~KisQtWidgetsTweaker ()
 

Static Public Member Functions

static KisQtWidgetsTweakerinstance ()
 

Private Attributes

Privated
 

Detailed Description

KisQtWidgetsTweaker is used to make minor adjustments to "native" qt widgets' behavior application-wise by filtering events addressed to them It expected to be installed on the application

Definition at line 20 of file KisQtWidgetsTweaker.h.

Constructor & Destructor Documentation

◆ KisQtWidgetsTweaker()

KisQtWidgetsTweaker::KisQtWidgetsTweaker ( QObject * parent = nullptr)

Definition at line 231 of file KisQtWidgetsTweaker.cpp.

232 :QObject(parent)
234{
235
236}

◆ ~KisQtWidgetsTweaker()

KisQtWidgetsTweaker::~KisQtWidgetsTweaker ( )

Definition at line 238 of file KisQtWidgetsTweaker.cpp.

239{
240 delete d;
241}

References d.

Member Function Documentation

◆ eventFilter()

bool KisQtWidgetsTweaker::eventFilter ( QObject * receiver,
QEvent * event )
override

Definition at line 242 of file KisQtWidgetsTweaker.cpp.

243{
244 switch(event->type()) {
245 case QEvent::ShortcutOverride:{
246 //QLineEdit and other widgets lets qt's shortcut system take away it's keyboard events
247 //even is it knows them, such as ctrl+backspace
248 //if there is application-wide shortcut, assigned to it.
249 //The following code fixes it
250 //by accepting ShortcutOverride events.
251
252 //if you press key 'a' and then 'b', qt at first call
253 //all handlers for 'a' key press event, and only after that
254 //for 'b'
255 QKeyEvent *key = static_cast<QKeyEvent*>(event);
258 }
259 for(int i = 0; i < numOfShortcutOverriders; ++i) {
260 if (d->decision != ShortcutOverriderBase::DecisionOnShortcutOverride::askNext) {
261 break;
262 }
263 if (d->interestedHandlers.at(i)) {
264 d->decision = allShortcutOverriders[i]->handleEvent(receiver, key);
265 }
266 }
267 //if nothing said whether shortcutoverride to be accepted
268 //last widget that qt will ask will be kismainwindow or docker
269 if (qobject_cast<KisMainWindow*>(receiver)!=nullptr||
270 receiver->inherits(QDockWidget::staticMetaObject.className())) {
271 for (int i = 0; i < numOfShortcutOverriders; ++i) {
272 if (d->decision != ShortcutOverriderBase::DecisionOnShortcutOverride::askNext) {
273 break;
274 }
275 if (d->interestedHandlers.at(i)) {
276 d->decision = allShortcutOverriders[i]->finishedPhysicalKeyPressHandling();
277 }
278 }
279
281 }
282 bool retval = false;
283 switch (d->decision) {
284 case ShortcutOverriderBase::DecisionOnShortcutOverride::askNext:
285 event->ignore();
286 retval = false;
287 break;
288 case ShortcutOverriderBase::DecisionOnShortcutOverride::dontOverrideShortcut:
289 event->ignore();
290 retval = true;
291 break;
292 case ShortcutOverriderBase::DecisionOnShortcutOverride::overrideShortcut:
293 event->accept();
294 //once shortcutoverride accepted, qt stop asking everyone
295 //about it and proceed to handling next event
297 retval = true;
298 break;
299 }
300
301 return retval || QObject::eventFilter(receiver, event);
302
303 }break;
304
305 //other event types
306 default:
307 break;
308 }
309
310
311 //code for tweaking the behavior of other qt elements will go here
312
313
314 return QObject::eventFilter(receiver, event);
315}
ShortcutOverriderBase::DecisionOnShortcutOverride decision
void newPhysicalKeyPressed(QKeyEvent *event)

References d, KisQtWidgetsTweaker::Private::decision, KisQtWidgetsTweaker::Private::interestedHandlers, KisQtWidgetsTweaker::Private::lastKeyPressProcessingComplete, and KisQtWidgetsTweaker::Private::newPhysicalKeyPressed().

◆ instance()

KisQtWidgetsTweaker * KisQtWidgetsTweaker::instance ( )
static

Definition at line 318 of file KisQtWidgetsTweaker.cpp.

319{
320 return kqwt_instance;
321}

Member Data Documentation

◆ d

Private* KisQtWidgetsTweaker::d
private

Definition at line 31 of file KisQtWidgetsTweaker.h.


The documentation for this class was generated from the following files: