void MInputContextConnection::activateContext(unsigned int connectionId) { if (connectionId == activeConnection) { return; } /* Notify current/previously active context that it is no longer active */ sendActivationLostEvent(); activeConnection = connectionId; /* Notify new input context about state/settings stored in the IM server */ if (activeConnection) { /* Hack: Circumvent if(newValue == oldValue) return; guards */ mGlobalCorrectionEnabled = !mGlobalCorrectionEnabled; setGlobalCorrectionEnabled(!mGlobalCorrectionEnabled); mRedirectionEnabled = !mRedirectionEnabled; setRedirectKeys(!mRedirectionEnabled); mDetectableAutoRepeat = !mDetectableAutoRepeat; setDetectableAutoRepeat(!mDetectableAutoRepeat); } Q_EMIT clientActivated(connectionId); }
void SearchDialog::fillClients() { vector<ClientWidget> widgets = m_widgets; m_widgets.clear(); m_search->cmbClients->clear(); unsigned nClients = 0; int current = -1; int defCurrent = -1; for (unsigned i = 0; i < getContacts()->nClients(); i++){ Client *client = getContacts()->getClient(i); QWidget *search = client->searchWindow(m_search->wndCondition); if (search == NULL) continue; unsigned n; for (n = 0; n < widgets.size(); n++){ if ((widgets[n].client != client) || !widgets[n].name.isEmpty()) continue; delete search; search = widgets[n].widget; widgets[n].widget = NULL; break; } if (n >= widgets.size()) m_search->wndCondition->addWidget(search, ++m_id); m_search->cmbClients->insertItem(Pict(client->protocol()->description()->icon, m_search->cmbClients->colorGroup().base()), CorePlugin::m_plugin->clientName(client)); ClientWidget cw; cw.client = client; cw.widget = search; m_widgets.push_back(cw); if (search == m_current) current = m_widgets.size() - 1; if (client->protocol()->description()->flags & PROTOCOL_SEARCH) nClients++; if (client->name() == CorePlugin::m_plugin->getSearchClient()) defCurrent = m_widgets.size() - 1; } if (nClients > 1){ unsigned n; QWidget *search = NULL; for (n = 0; n < widgets.size(); n++){ if (widgets[n].client == (Client*)(-1)){ search = widgets[n].widget; widgets[n].widget = NULL; break; } } if (search == NULL){ search = new SearchAll(m_search->wndCondition); m_search->wndCondition->addWidget(new SearchAll(m_search->wndCondition), ++m_id); } m_search->cmbClients->insertItem(Pict("find", m_search->cmbClients->colorGroup().base()), i18n("All networks")); ClientWidget cw; cw.client = (Client*)(-1); cw.widget = search; m_widgets.push_back(cw); if ((search == m_current) || ((m_current == NULL) && (current < 0) && (defCurrent < 0))) current = m_widgets.size() - 1; } unsigned n; QWidget *search = NULL; for (n = 0; n < widgets.size(); n++){ if (widgets[n].client == NULL){ search = widgets[n].widget; widgets[n].widget = NULL; break; } } if (search == NULL){ search = new NonIM(m_search->wndCondition); m_search->wndCondition->addWidget(search, ++m_id); } m_search->cmbClients->insertItem(Pict("nonim", m_search->cmbClients->colorGroup().base()), i18n("Non-IM contact")); ClientWidget cw; cw.client = NULL; cw.widget = search; m_widgets.push_back(cw); if (search == m_current) current = m_widgets.size() - 1; if (m_update->isActive()){ m_update->stop(); }else if (m_result){ m_result->viewport()->setUpdatesEnabled(false); } for (n = 0; n < widgets.size(); n++){ if (widgets[n].name.isEmpty()) continue; unsigned i; for (i = 0; i < m_widgets.size(); i++) if (widgets[n].client == m_widgets[i].client) break; if (i >= m_widgets.size()) continue; m_search->cmbClients->insertItem(Pict(widgets[n].client->protocol()->description()->icon, m_search->cmbClients->colorGroup().base()), widgets[n].name); m_widgets.push_back(widgets[n]); widgets[n].widget = NULL; } for (n = 0; n < widgets.size(); n++){ if (widgets[n].widget){ if (widgets[n].widget == m_active) searchDone(m_active); if (widgets[n].widget == m_current) m_current = NULL; for (QListViewItem *item = m_result->firstChild(); item; ){ QListViewItem *next = item->nextSibling(); if ((QWidget*)(item->text(COL_SEARCH_WND).toULong()) == widgets[n].widget) delete item; if (next == NULL) break; item = next; } delete widgets[n].widget; } } if (current == -1) current = defCurrent; if (current == -1) current = 0; m_search->cmbClients->setCurrentItem(current); clientActivated(current); setStatus(); m_update->start(500); }
void VCardFactory::setClient(Client *c) { if (client_) disconnect(client_); client_ = c; connect(c, SIGNAL(activated()), SLOT(clientActivated())); }