From ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- khtml/java/kjavaappletwidget.cpp | 140 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 khtml/java/kjavaappletwidget.cpp (limited to 'khtml/java/kjavaappletwidget.cpp') diff --git a/khtml/java/kjavaappletwidget.cpp b/khtml/java/kjavaappletwidget.cpp new file mode 100644 index 000000000..31ce8b5e6 --- /dev/null +++ b/khtml/java/kjavaappletwidget.cpp @@ -0,0 +1,140 @@ +/* This file is part of the KDE project + * + * Copyright (C) 2000 Richard Moore + * 2000 Wynn Wilkes + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "kjavaappletwidget.h" +#include "kjavaappletserver.h" + +#include +#include +#include + +#include + + +// For future expansion +class KJavaAppletWidgetPrivate +{ +friend class KJavaAppletWidget; +private: + QLabel* tmplabel; +}; + +int KJavaAppletWidget::appletCount = 0; + +KJavaAppletWidget::KJavaAppletWidget( QWidget* parent, const char* name ) + : QXEmbed ( parent, name) +{ + setProtocol(QXEmbed::XPLAIN); + + m_applet = new KJavaApplet( this ); + d = new KJavaAppletWidgetPrivate; + m_kwm = new KWinModule( this ); + + d->tmplabel = new QLabel( this ); + d->tmplabel->setText( KJavaAppletServer::getAppletLabel() ); + d->tmplabel->setAlignment( Qt::AlignCenter | Qt::WordBreak ); + d->tmplabel->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken ); + d->tmplabel->show(); + + m_swallowTitle.sprintf( "KJAS Applet - Ticket number %u", appletCount++ ); + m_applet->setWindowName( m_swallowTitle ); +} + +KJavaAppletWidget::~KJavaAppletWidget() +{ + delete m_applet; + delete d; +} + +void KJavaAppletWidget::showApplet() +{ + connect( m_kwm, SIGNAL( windowAdded( WId ) ), + this, SLOT( setWindow( WId ) ) ); + + m_kwm->doNotManage( m_swallowTitle ); + + //Now we send applet info to the applet server + if ( !m_applet->isCreated() ) + m_applet->create(); +} + +void KJavaAppletWidget::setWindow( WId w ) +{ + //make sure that this window has the right name, if so, embed it... + KWin::WindowInfo w_info = KWin::windowInfo( w ); + if ( m_swallowTitle == w_info.name() || + m_swallowTitle == w_info.visibleName() ) + { + kdDebug(6100) << "swallowing our window: " << m_swallowTitle + << ", window id = " << w << endl; + delete d->tmplabel; + d->tmplabel = 0; + + // disconnect from KWM events + disconnect( m_kwm, SIGNAL( windowAdded( WId ) ), + this, SLOT( setWindow( WId ) ) ); + + + embed( w ); + setFocus(); + } +} + +QSize KJavaAppletWidget::sizeHint() const +{ + kdDebug(6100) << "KJavaAppletWidget::sizeHint()" << endl; + QSize rval = QXEmbed::sizeHint(); + + if( rval.width() == 0 || rval.height() == 0 ) + { + if( width() != 0 && height() != 0 ) + { + rval = QSize( width(), height() ); + } + } + + kdDebug(6100) << "returning: (" << rval.width() << ", " << rval.height() << ")" << endl; + + return rval; +} + +void KJavaAppletWidget::resize( int w, int h ) +{ + if( d->tmplabel ) + { + d->tmplabel->resize( w, h ); + m_applet->setSize( QSize( w, h ) ); + } + + QXEmbed::resize( w, h ); +} + +void KJavaAppletWidget::showEvent (QShowEvent * e) { + QXEmbed::showEvent(e); + if (!applet()->isCreated() && !applet()->appletClass().isEmpty()) { + // delayed showApplet + if (applet()->size().width() <= 0) + applet()->setSize (sizeHint()); + showApplet(); + } +} + +#include "kjavaappletwidget.moc" -- cgit v1.2.1