File indexing completed on 2024-05-26 05:37:03
0001 /* 0002 SPDX-FileCopyrightText: 2019 Harald Sitter <sitter@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "doodad.h" 0008 0009 #include <QKeyEvent> 0010 #include <QtGui/private/qtx11extras_p.h> 0011 0012 #include "application.h" 0013 #include "shape.h" 0014 0015 Doodad *Doodad::factorize(XkbDoodadPtr doodad, XkbDescPtr xkb, QObject *parent) 0016 { 0017 switch (doodad->any.type) { 0018 case XkbOutlineDoodad: 0019 case XkbSolidDoodad: 0020 return new ShapeDoodad(doodad, xkb, parent); 0021 case XkbTextDoodad: 0022 return new TextDoodad(doodad, xkb, parent); 0023 case XkbIndicatorDoodad: 0024 return new IndicatorDoodad(doodad, xkb, parent); 0025 case XkbLogoDoodad: 0026 return new LogoDoodad(doodad, xkb, parent); 0027 } 0028 0029 Q_UNREACHABLE(); 0030 return nullptr; 0031 } 0032 0033 Doodad::Doodad(XkbDoodadPtr doodad_, XkbDescPtr xkb_, QObject *parent) 0034 : XkbObject(xkb_, parent) 0035 , doodad(doodad_) 0036 { 0037 } 0038 0039 ShapeDoodad::ShapeDoodad(XkbDoodadPtr doodad_, XkbDescPtr xkb_, QObject *parent) 0040 : Doodad(doodad_, xkb_, parent) 0041 , shape(new Shape(xkb->geom->shapes + doodad_->shape.shape_ndx, xkb, this)) 0042 , outlineOnly(doodad->any.type == XkbOutlineDoodad) 0043 { 0044 } 0045 0046 TextDoodad::TextDoodad(XkbDoodadPtr doodad_, XkbDescPtr xkb_, QObject *parent) 0047 : Doodad(doodad_, xkb_, parent) 0048 { 0049 } 0050 0051 IndicatorDoodad::IndicatorDoodad(XkbDoodadPtr doodad_, XkbDescPtr xkb_, QObject *parent) 0052 : Doodad(doodad_, xkb_, parent) 0053 , shape(new Shape(xkb->geom->shapes + doodad_->indicator.shape_ndx, xkb, this)) 0054 { 0055 connect(Application::instance(), &Application::keyEvent, this, &IndicatorDoodad::refreshState); 0056 refreshState(); 0057 } 0058 0059 void IndicatorDoodad::refreshState() 0060 { 0061 int onInt = False; 0062 if (!XkbGetNamedIndicator(QX11Info::display(), doodad->indicator.name, nullptr, &onInt, nullptr, nullptr)) { 0063 on = false; 0064 } else { 0065 on = onInt == True ? true : false; 0066 } 0067 Q_EMIT onChanged(); 0068 } 0069 0070 LogoDoodad::LogoDoodad(XkbDoodadPtr doodad_, XkbDescPtr xkb_, QObject *parent) 0071 : ShapeDoodad(doodad_, xkb_, parent) 0072 { 0073 } 0074 0075 #include "moc_doodad.cpp"