File indexing completed on 2024-12-01 13:34:29
0001 /* 0002 SPDX-FileCopyrightText: 1999-2001 Lubos Lunak <l.lunak@kde.org> 0003 SPDX-FileCopyrightText: 2008 Michael Jansen <kde@michael-jansen.biz> 0004 0005 SPDX-License-Identifier: LGPL-2.0-only 0006 */ 0007 #include "conditions/existing_window_condition.h" 0008 0009 #include "windows_helper/window_selection_list.h" 0010 0011 #include "khotkeysglobal.h" 0012 #include "windows_handler.h" 0013 0014 namespace KHotKeys 0015 { 0016 Existing_window_condition::Existing_window_condition(KConfigGroup &cfg_P, Condition_list_base *parent_P) 0017 : Condition(cfg_P, parent_P) 0018 { 0019 KConfigGroup windowConfig(cfg_P.config(), cfg_P.name() + "Window"); 0020 _window = new Windowdef_list(windowConfig); 0021 init(); 0022 set_match(); 0023 } 0024 0025 Existing_window_condition::Existing_window_condition(Windowdef_list *window_P, Condition_list_base *parent_P) 0026 : Condition(parent_P) 0027 , _window(window_P) 0028 , is_match(false) 0029 { 0030 init(); 0031 set_match(); 0032 } 0033 0034 Existing_window_condition::~Existing_window_condition() 0035 { 0036 disconnect(windows_handler, nullptr, this, nullptr); 0037 delete _window; 0038 } 0039 0040 void Existing_window_condition::cfg_write(KConfigGroup &cfg_P) const 0041 { 0042 base::cfg_write(cfg_P); 0043 KConfigGroup windowConfig(cfg_P.config(), cfg_P.name() + "Window"); 0044 window()->cfg_write(windowConfig); 0045 cfg_P.writeEntry("Type", "EXISTING_WINDOW"); // overwrites value set in base::cfg_write() 0046 } 0047 0048 Existing_window_condition *Existing_window_condition::copy() const 0049 { 0050 return new Existing_window_condition(window()->copy()); 0051 } 0052 0053 const QString Existing_window_condition::description() const 0054 { 0055 return i18n("Existing window: ") + window()->comment(); 0056 } 0057 0058 void Existing_window_condition::init() 0059 { 0060 connect(windows_handler, SIGNAL(window_added(WId)), this, SLOT(window_added(WId))); 0061 connect(windows_handler, SIGNAL(window_removed(WId)), this, SLOT(window_removed(WId))); 0062 } 0063 0064 bool Existing_window_condition::match() const 0065 { 0066 return is_match; 0067 } 0068 0069 void Existing_window_condition::set_match(WId w_P) 0070 { 0071 if (w_P != None && !is_match) 0072 is_match = window()->match(Window_data(w_P)); 0073 else 0074 is_match = windows_handler->find_window(window()) != None; 0075 updated(); 0076 } 0077 0078 const Windowdef_list *Existing_window_condition::window() const 0079 { 0080 return _window; 0081 } 0082 0083 Windowdef_list *Existing_window_condition::window() 0084 { 0085 return _window; 0086 } 0087 0088 void Existing_window_condition::window_added(WId w_P) 0089 { 0090 set_match(w_P); 0091 } 0092 0093 void Existing_window_condition::window_removed(WId) 0094 { 0095 set_match(); 0096 } 0097 0098 } // namespace KHotKeys