From: <it_...@us...> - 2008-12-17 13:56:13
|
Revision: 3999 http://kmess.svn.sourceforge.net/kmess/?rev=3999&view=rev Author: it_amroth Date: 2008-12-17 13:56:09 +0000 (Wed, 17 Dec 2008) Log Message: ----------- * Improved the logic behind chat tab deletion, removed two useless methods. * Improved the mechanism which allows the message editor to always keep focus. Modified Paths: -------------- trunk/kmess/ChangeLog trunk/kmess/src/chat/chatmaster.cpp trunk/kmess/src/chat/chatview.cpp trunk/kmess/src/chat/chatwindow.cpp trunk/kmess/src/chat/chatwindow.h Modified: trunk/kmess/ChangeLog =================================================================== --- trunk/kmess/ChangeLog 2008-12-17 12:10:06 UTC (rev 3998) +++ trunk/kmess/ChangeLog 2008-12-17 13:56:09 UTC (rev 3999) @@ -1,6 +1,8 @@ 2008-12-17 (Valerio) * Fixed remembering the spelling check option in the chat window. + * Improved the logic behind chat tab deletion, removed two useless methods. + * Improved the mechanism which allows the message editor to always keep focus. 2008-12-16 (Valerio) * Enabled enhanced rendering hints on the contact list view: the emoticons are now Modified: trunk/kmess/src/chat/chatmaster.cpp =================================================================== --- trunk/kmess/src/chat/chatmaster.cpp 2008-12-17 12:10:06 UTC (rev 3998) +++ trunk/kmess/src/chat/chatmaster.cpp 2008-12-17 13:56:09 UTC (rev 3999) @@ -110,7 +110,7 @@ #ifdef KMESSDEBUG_CHATMASTER kDebug() << "This is a group chat, closing it."; #endif - chat->getChatWindow()->slotSwitchAndDeleteTab( chat ); + chat->getChatWindow()->removeChatTab( chat ); continue; } @@ -122,7 +122,7 @@ #ifdef KMESSDEBUG_CHATMASTER kDebug() << "This chat is with a non-listed contact, closing it."; #endif - chat->getChatWindow()->slotSwitchAndDeleteTab( chat ); + chat->getChatWindow()->removeChatTab( chat ); continue; } Modified: trunk/kmess/src/chat/chatview.cpp =================================================================== --- trunk/kmess/src/chat/chatview.cpp 2008-12-17 12:10:06 UTC (rev 3998) +++ trunk/kmess/src/chat/chatview.cpp 2008-12-17 13:56:09 UTC (rev 3999) @@ -302,13 +302,23 @@ case QEvent::Show: { QWidget *focused = QApplication::focusWidget(); - if( ! isVisible() || ! focused ) + + // Do not set focus when the view is hidden or there are no focused widgets + if( ! isVisible() || ! focused || focused == messageEdit_ ) { break; } - if( focused != messageEdit_ && QString( focused->metaObject()->className() ) != "KHistoryComboBox" ) + // Do not set focus when the event came from another chat view + if( messageEdit_->objectName() == focused->objectName() + && messageEdit_->parent() != focused->parent() ) { + break; + } + + // Allow the search bar to take focus + if( QString( focused->metaObject()->className() ) != "KHistoryComboBox" ) + { messageEdit_->setFocus( Qt::OtherFocusReason ); } } Modified: trunk/kmess/src/chat/chatwindow.cpp =================================================================== --- trunk/kmess/src/chat/chatwindow.cpp 2008-12-17 12:10:06 UTC (rev 3998) +++ trunk/kmess/src/chat/chatwindow.cpp 2008-12-17 13:56:09 UTC (rev 3999) @@ -134,9 +134,9 @@ connect( tabBar_, SIGNAL( currentChanged(int) ), this, SLOT ( slotSwitchTab(int) ) ); connect( tabBar_, SIGNAL( closeRequest(int) ), - this, SLOT ( slotSwitchAndDeleteTab(int) ) ); + this, SLOT ( removeChatTab(int) ) ); connect( tabBar_, SIGNAL( mouseMiddleClick(int) ), - this, SLOT ( slotSwitchAndDeleteTab(int) ) ); + this, SLOT ( removeChatTab(int) ) ); connect( tabBar_, SIGNAL( wheelDelta(int) ), this, SLOT ( slotWheelMouseMoved(int) ) ); @@ -445,9 +445,6 @@ Chat *ChatWindow::getCurrentChat() { int count = tabBar_->count(); -#ifdef KMESSTEST - KMESS_ASSERT( count > 0 ); -#endif // This really shouldn't happen, but instead of getting a qFatal(), // let the code crash with a normal null pointer instead. @@ -716,10 +713,8 @@ // Select the leftmost tab int newIndex = ( currentIndex == 0 ) ? currentIndex : currentIndex - 1; - // Remove the tab of the closed chat - tabBar_->removeTab( currentIndex ); - // This method calls automatically the slotSwitchTab + kDebug() << "Switching to tab" << newIndex; tabBar_->setCurrentIndex( newIndex ); // If there's more than one tab, show the Close All option and close button @@ -858,23 +853,42 @@ KMESS_ASSERT( chats_.count() > 0 ); #endif - // Find which chat has the given index - Chat *chat = getChat( index ); +#ifdef KMESSDEBUG_CHATWINDOW + kDebug() << "Forwarding removal command for chat index:" << index; + kDebug() << "Currently open chats:" << chats_; +#endif + // Relay the deletion to the main method + return removeChatTab( getChat( index ) ); +} + + + +// Remove a chat +bool ChatWindow::removeChatTab( Chat *chat ) +{ if( chat == 0 ) { - kWarning() << "Asked to remove index" << index << ", but there are" << chats_.count() << "open tabs!"; + kWarning() << "Invalid chat selected, cannot remove tab."; return false; } + int closedTabIndex = chats_.indexOf( chat ); + #ifdef KMESSDEBUG_CHATWINDOW - kDebug() << "Removing chat" << chat << "with index" << chats_.indexOf( chat ); - kDebug() << "From open chats:" << chats_; + kDebug() << "Removing chat" << chat << "with index" << closedTabIndex; #endif // Remove the chat from the list of open chats chats_.removeAll( chat ); + // Remove the tab of the closed chat + tabBar_->removeTab( closedTabIndex ); + +#ifdef KMESSDEBUG_CHATWINDOW + kDebug() << "Removed tab index" << closedTabIndex; +#endif + // Remove the chat's objects from the window's UI chatFrame_->layout()->removeWidget( chat ); contactsDock_->setWidget( 0 ); @@ -891,6 +905,12 @@ delete chat; + // If there are no more open chats, close the window too + if( chats_.count() < 1 ) + { + queryClose(); + } + return true; } @@ -1274,7 +1294,9 @@ if( tabIndex < 0 || tabIndex >= chats_.count() ) { - kWarning() << "Chat tab index" << tabIndex << "doesn't exist in the tabs list!"; +#ifdef KMESSDEBUG_CHATWINDOW + kDebug() << "Chat tab index" << tabIndex << "doesn't exist in the tabs list, the window is closing?"; +#endif return; } @@ -1283,9 +1305,16 @@ // and lastActiveChat is 0 the chat doesn't refresh! if( lastActiveChatIndex_ == tabIndex && ( lastActiveChatIndex_ != 0 && tabIndex != 0 ) ) { +#ifdef KMESSDEBUG_CHATWINDOW + kDebug() << "Not reactivating current tab."; +#endif return; } +#ifdef KMESSDEBUG_CHATWINDOW + kDebug() << "Activating chat tab" << tabIndex; +#endif + Chat *chat = chats_.at( tabIndex ); ContactsWidget *contactsWidget = chat->getContactsWidget(); @@ -1379,34 +1408,6 @@ -// Switch the window to the clicked tab and remove it -void ChatWindow::slotSwitchAndDeleteTab( Chat *chat ) -{ - int index = chats_.indexOf( chat ); - - if( index == -1 ) - { -#ifdef KMESSDEBUG_CHATWINDOW - kDebug() << "Cannot switch to non existing chat" << chat; -#endif - return; - } - - // Call back the main method - slotSwitchAndDeleteTab( index ); -} - - - -// Switch the window to the clicked tab and remove it -void ChatWindow::slotSwitchAndDeleteTab( int tabIndex ) -{ - tabBar_->setCurrentIndex( tabIndex ); - queryClose(); -} - - - // Start GnomeMeeting with a contact. void ChatWindow::startMeeting() { Modified: trunk/kmess/src/chat/chatwindow.h =================================================================== --- trunk/kmess/src/chat/chatwindow.h 2008-12-17 12:10:06 UTC (rev 3998) +++ trunk/kmess/src/chat/chatwindow.h 2008-12-17 13:56:09 UTC (rev 3999) @@ -82,6 +82,8 @@ Chat *getChat( int index = -1 ); // Return a reference to the active chat Chat *getCurrentChat(); + // Remove a chat + bool removeChatTab( Chat *chat ); // Change the active chat void setCurrentChat( Chat *chat ); // Initialize the object @@ -102,8 +104,6 @@ void createMenus(); // Restore the window properties (called by KMainWindow) void readProperties( const KConfigGroup &config = *((const KConfigGroup *)0) ); - // Delete an existing chat tab - bool removeChatTab( int index ); // The application is exiting bool queryExit(); // Save the window properties (called by KMainWindow) @@ -112,8 +112,6 @@ public slots: // Show a status message temporarily in the status dialog void showStatusMessage( QString message = QString(), int duration = 5 ); - // Switch the window to the clicked tab and remove it - void slotSwitchAndDeleteTab( Chat *chat ); private slots: // Private slots // Clean up the view of the current chat tab @@ -142,6 +140,8 @@ bool queryClose(); // The chat window is closing bool queryCloseAll(); + // Delete an existing chat tab + bool removeChatTab( int index ); // Save the chat according to the user's request void saveChat(); // Change the caption of the chat window @@ -166,8 +166,6 @@ void slotUpdateChatInfo( Chat *chat = 0 ); // Switch the window to the clicked tab void slotSwitchTab( int tabIndex ); - // Switch the window to the clicked tab and remove it - void slotSwitchAndDeleteTab( int tabIndex ); // Switch the window to the tab at the left of the current one void slotSwitchToLeftTab(); // Switch the window to the tab at the right of the current one This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |