SVN commit 726099 by rysin: - plasma applet (initial code) - fix couple of crashes - some cleanups M +36 -33 CMakeLists.txt M +3 -0 kcmlayout.cpp M +1 -1 kcmmisc/CMakeLists.txt M +1 -1 kxkb.desktop M +20 -21 kxkb_applet.cpp M +12 -48 kxkb_applet.h M +9 -0 kxkbcore.cpp M +17 -11 rules.cpp --- trunk/KDE/kdebase/workspace/kcontrol/kxkb/CMakeLists.txt #726098:726099 @@ -13,22 +13,23 @@ macro_optional_find_package(GObject) if(LIBXKLAVIER_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND) + #MESSAGE("xklav:: ${LIBXKLAVIER_DEFINITIONS}") + #MESSAGE("xklav:: ${LIBXKLAVIER_LIBRARIES}") + SET(CMAKE_REQUIRED_DEFINITIONS ${LIBXKLAVIER_DEFINITIONS}) + SET(CMAKE_REQUIRED_LIBRARIES ${LIBXKLAVIER_LIBRARIES}) -#MESSAGE("xklav:: ${LIBXKLAVIER_DEFINITIONS}") -#MESSAGE("xklav:: ${LIBXKLAVIER_LIBRARIES}") - SET(CMAKE_REQUIRED_DEFINITIONS ${LIBXKLAVIER_DEFINITIONS}) - SET(CMAKE_REQUIRED_LIBRARIES ${LIBXKLAVIER_LIBRARIES}) - - SET(XKB_SUPPORT_SRC xklavier_adaptor.cpp) - SET(XKB_SUPPORT_LIB ${LIBXKLAVIER_LIBRARIES} ${GOBJECT_LIBRARIES}) - ADD_DEFINITIONS(-DHAVE_XKLAVIER=1 ${LIBXKLAVIER_DEFINITIONS} ${_LibGLIB2Cflags}) - include_directories(${GLIB2_INCLUDE_DIR}) + SET(XKB_SUPPORT_SRC xklavier_adaptor.cpp) + SET(XKB_SUPPORT_LIB ${LIBXKLAVIER_LIBRARIES} ${GOBJECT_LIBRARIES}) + ADD_DEFINITIONS(-DHAVE_XKLAVIER=1 ${LIBXKLAVIER_DEFINITIONS} ${_LibGLIB2Cflags}) + include_directories(${GLIB2_INCLUDE_DIR}) else(LIBXKLAVIER_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND) - MESSAGE ("Could not find glib, gobject or libxklavier >= 3.0 - old "xkbfile" code will be used to get keyboard layout configuration!") + MESSAGE ("Could not find glib, gobject or libxklavier >= 3.0 - old "xkbfile" code will be used to get keyboard layout configuration!") endif(LIBXKLAVIER_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND) endif( USE_XKLAVIER STREQUAL ON ) +find_package(Plasma) + ########### common sources ############ set(kxkb_COMMON_SRCS @@ -53,16 +54,15 @@ kde4_add_plugin(kcm_keyboard_layout ${kcm_keyboard_layout_PART_SRCS}) -target_link_libraries(kcm_keyboard_layout - ${KDE4_KIO_LIBS} xkbfile ${QT_QT3SUPPORT_LIBRARY} - ${XKB_SUPPORT_LIB} +target_link_libraries(kcm_keyboard_layout ${KDE4_KIO_LIBS} + xkbfile ${XKB_SUPPORT_LIB} ) + if(X11_XTest_FOUND) target_link_libraries(kcm_keyboard_layout ${X11_XTest_LIB}) endif(X11_XTest_FOUND) install(TARGETS kcm_keyboard_layout DESTINATION ${PLUGIN_INSTALL_DIR} ) - install( FILES keyboard_layout.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) @@ -78,7 +78,8 @@ kde4_add_kdeinit_executable( kxkb ${kxkb_KDEINIT_SRCS}) -target_link_libraries(kdeinit_kxkb ${X11_X11_LIB} ${X11_Xext_LIB} ${KDE4_KDEUI_LIBS} xkbfile ${XKB_SUPPORT_LIB}) +target_link_libraries(kdeinit_kxkb ${X11_X11_LIB} ${X11_Xext_LIB} ${KDE4_KDEUI_LIBS} + xkbfile ${XKB_SUPPORT_LIB}) install(TARGETS kdeinit_kxkb DESTINATION ${LIB_INSTALL_DIR} ) @@ -87,28 +88,34 @@ #install(FILES kxkb_component.h DESTINATION ${INCLUDE_INSTALL_DIR}) -########### KXKB Applet ############### +########### KXKB Plasma Applet ############### -if(BUILD_KICKER) -set(kxkb_panelapplet_PART_SRCS kxkb_applet.cpp) +if(PLASMA_FOUND) -kde4_add_plugin(kxkb_panelapplet ${kxkb_panelapplet_PART_SRCS}) + set(plasma_applet_kxkb_SRCS kxkb_applet.cpp ${kxkb_COMMON_SRCS} + kxkbcore.cpp + kxkbwidget.cpp + ) -target_link_libraries(kxkb_panelapplet kworkspace kickermain kdeinit_kxkb - ${KDE4_KIO_LIBS} xkbfile - ${XKB_SUPPORT_LIB} -) -if(X11_XTest_FOUND) - target_link_libraries(kxkb_panelapplet ${X11_XTest_LIB}) -endif(X11_XTest_FOUND) + kde4_add_plugin(plasma_applet_kxkb ${plasma_applet_kxkb_SRCS}) -install(TARGETS kxkb_panelapplet DESTINATION ${PLUGIN_INSTALL_DIR} ) + target_link_libraries(plasma_applet_kxkb ${PLASMA_LIBS} + ${KDE4_KDEUI_LIBS} xkbfile ${XKB_SUPPORT_LIB}) + + if(X11_XTest_FOUND) + target_link_libraries(plasma_applet_kxkb ${X11_XTest_LIB}) + endif(X11_XTest_FOUND) -install(FILES kxkb.desktop DESTINATION ${DATA_INSTALL_DIR}/kicker/applets) -endif(BUILD_KICKER) + install(TARGETS plasma_applet_kxkb DESTINATION ${PLUGIN_INSTALL_DIR} ) + install(FILES plasma-applet-kxkb.desktop DESTINATION ${SERVICES_INSTALL_DIR}) + ADD_DEPENDENCIES(plasma_applet_kxkb kdeinit_kxkb) +endif(PLASMA_FOUND) + + ########### KXKB KPart ############### +# we're not using KPart for now - it's too heavy # #set(kxkb_part_PART_SRCS kxkb_part.cpp) # @@ -126,7 +133,3 @@ #install( FILES kxkb_part.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) ##install( FILES kxkb_part.rc DESTINATION ${DATA_INSTALL_DIR}/kxkb_part ) - -########### install files ############### - -install( FILES keyboard_layout.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) --- trunk/KDE/kdebase/workspace/kcontrol/kxkb/kcmlayout.cpp #726098:726099 @@ -675,6 +675,9 @@ return; QModelIndexList selected = selectionModel->selectedRows(); + if( selected.count() < 1 ) + return; + int row = selected[0].row(); int new_row = row + shift; --- trunk/KDE/kdebase/workspace/kcontrol/kxkb/kcmmisc/CMakeLists.txt #726098:726099 @@ -14,7 +14,7 @@ target_link_libraries(kcm_keyboard - ${KDE4_KIO_LIBS} xkbfile ${QT_QT3SUPPORT_LIBRARY} + ${KDE4_KIO_LIBS} xkbfile ${XKB_SUPPORT_LIB} ) if(X11_XTest_FOUND) --- trunk/KDE/kdebase/workspace/kcontrol/kxkb/kxkb.desktop #726098:726099 @@ -67,5 +67,5 @@ Icon=keyboard X-DBUS-StartupType=Unique -X-KDE-Library=kxkb_panelapplet +X-KDE-Library=kdeinit_kxkb X-KDE-UniqueApplet=true --- trunk/KDE/kdebase/workspace/kcontrol/kxkb/kxkb_applet.cpp #726098:726099 @@ -17,6 +17,7 @@ */ #include +#include #include #include @@ -28,25 +29,16 @@ #include "kxkb_applet.moc" -extern "C" +KxkbApplet::KxkbApplet(QObject *parent, const QVariantList &args) + : Plasma::Applet(parent, args) { - KDE_EXPORT KPanelApplet* init(QWidget *parent, const QString& configFile) - { - KGlobal::locale()->insertCatalog("kxkb"); - int actions = Plasma::Preferences | Plasma::About | Plasma::Help; - return new KxkbApplet(configFile, Plasma::Normal, actions, parent); - } -} +// move( 0, 0 ); + m_kxkbCore = new KxkbCore(NULL, KxkbCore::KXKB_COMPONENT, KxkbWidget::MENU_FULL, KxkbWidget::WIDGET_LABEL); + m_kxkbCore->newInstance(); - -KxkbApplet::KxkbApplet(const QString& configFile, Plasma::Type type, - int actions, QWidget *parent, Qt::WFlags f) - : KPanelApplet(configFile, type, actions, parent, f) -{ - move( 0, 0 ); - kxkbWidget = new KxkbLabel( this ); - KxkbCore* kxkbCore = new KxkbCore(kxkbWidget); - kxkbCore->newInstance(); + setDrawStandardBackground(true); +// connect(m_systemTrayWidget, SIGNAL(sizeChanged()), SLOT(updateLayout())); + //m_kxkbWidget->show(); //setCustomMenu(widget->history()->popup()); //centerWidget(); //kxkbWidget->show(); @@ -54,14 +46,21 @@ KxkbApplet::~KxkbApplet() { + if (failedToLaunch()) { + // Do some cleanup here + } else { + // Save settings + } } -int KxkbApplet::widthForHeight(int height) const +QSizeF KxkbApplet::contentSizeHint() const { - return 32;//kxkbWidget->width(); +// return QSizeF(m_kxkbCore->size()); + return QSizeF(32,32); } -int KxkbApplet::heightForWidth(int width) const +void KxkbApplet::paintInterface(QPainter *painter, + const QStyleOptionGraphicsItem *option, + const QRect& contentsRect) { - return 32;//kxkbWidget->height(); } --- trunk/KDE/kdebase/workspace/kcontrol/kxkb/kxkb_applet.h #726098:726099 @@ -24,64 +24,28 @@ #include #include -#include -#include +#include -class KxkbWidget; +class QSizeF; +class KxkbCore; -class KxkbApplet : public KPanelApplet +class KxkbApplet : public Plasma::Applet { Q_OBJECT public: - explicit KxkbApplet(const QString& configFile, Plasma::Type t = Plasma::Normal, - int actions = 0, QWidget *parent = 0, Qt::WFlags f = 0); + explicit KxkbApplet(QObject *parent, const QVariantList &args); ~KxkbApplet(); - virtual int widthForHeight(int height) const; - virtual int heightForWidth(int width) const; - /** - * Is called when the user selects "About" from the applets RMB menu. - * Reimplement this function to launch a about dialog. - * - * Note that this is called only when your applet supports the About action. - * See @ref Action and @ref KPanelApplet(). - **/ + void paintInterface(QPainter *painter, + const QStyleOptionGraphicsItem *option, + const QRect& contentsRect); + QSizeF contentSizeHint() const; -// public slots: -// virtual void about(); - /** - * Is called when the user selects "Help" from the applets RMB menu. - * Reimplement this function to launch a manual or help page. - * - * Note that this is called only when your applet supports the Help action. - * See @ref Action and @ref KPanelApplet(). - **/ -// virtual void help(); - /** - * Is called when the user selects "Preferences" from the applets RMB menu. - * Reimplement this function to launch a preferences dialog or kcontrol module. - * - * Note that this is called only when your applet supports the preferences action. - * See @ref Action and @ref KPanelApplet(). - **/ -// virtual void preferences(); - -//protected: -// void resizeEvent(QResizeEvent *); -// void mousePressEvent(QMouseEvent *e); - - private: - KxkbWidget* kxkbWidget; -//private: -// KConfig *ksConfig; -// QWidget *mainView; -// KPopupMenu *mContextMenu; -// KPopupFrame *mBrightnessChooserFrame; -// BrightnessChooserImpl *chooser; - -//private: // Private methods + KxkbCore* m_kxkbCore; }; +K_EXPORT_PLASMA_APPLET(kxkb, KxkbApplet) + #endif --- trunk/KDE/kdebase/workspace/kcontrol/kxkb/kxkbcore.cpp #726098:726099 @@ -109,6 +109,8 @@ else m_kxkbWidget = new KxkbLabel(m_controlType, m_parentWidget); + kDebug() << "Created kxkb widget" << m_kxkbWidget; + connect(m_kxkbWidget, SIGNAL(menuTriggered(QAction*)), this, SLOT(iconMenuTriggered(QAction*))); connect(m_kxkbWidget, SIGNAL(iconToggled()), this, SLOT(toggled())); @@ -291,6 +293,13 @@ void KxkbCore::initTray() { + if( m_kxkbWidget == NULL ) { + if( m_kxkbConfig.m_layouts.count() > 1 || m_kxkbConfig.m_showSingle ) + initWidget(); + else + return; + } + kDebug() << "initing tray"; m_kxkbWidget->setShowFlag(m_kxkbConfig.m_showFlag); --- trunk/KDE/kdebase/workspace/kcontrol/kxkb/rules.cpp #726098:726099 @@ -96,20 +96,26 @@ void XkbRules::loadRules(const QString &file, bool layoutsOnly) { - RulesInfo* rules = X11Helper::loadRules(file, layoutsOnly); + RulesInfo* rules = X11Helper::loadRules(file, layoutsOnly); - if (rules == NULL) { - kDebug() << "Unable to load rules"; - return; - } + if (rules == NULL) { + kDebug() << "Unable to load rules"; + return; + } - m_layouts= rules->layouts; + m_layouts= rules->layouts; - if( layoutsOnly == false ) { - m_models = rules->models; - m_options = rules->options; - m_optionGroups = rules->optionGroups; - } + if( layoutsOnly == false ) { + m_models = rules->models; + m_options = rules->options; + m_optionGroups = rules->optionGroups; + + QHashIterator it( m_options ); + for (; it.hasNext(); ) { + const XkbOption& option = it.next().value(); + option.group->options.append(option); + } + } }