aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authortoshi <toshi@03aab468-d3d2-4883-8b12-f661bbf03fa8>2012-09-14 17:29:15 +0000
committertoshi <toshi@03aab468-d3d2-4883-8b12-f661bbf03fa8>2012-09-14 17:29:15 +0000
commit02320d9982e18f75eba83e9f0fc6c727ad043df9 (patch)
tree64ccdf68e4a0187a503651e3fcd4145a46357be3 /core
parent5a7e0259021e2c9bb6b7164be7debd6f6332d73f (diff)
downloadmikutter-02320d9982e18f75eba83e9f0fc6c727ad043df9.tar.gz
mikutter内部のフォーカス切り替えイベントに、Gtkから発生したものかを判別するフラグを持たせて、Gtk由来ならgtkプラグインは無視するようにした closes #491
git-svn-id: svn://toshia.dip.jp/mikutter/trunk@990 03aab468-d3d2-4883-8b12-f661bbf03fa8
Diffstat (limited to 'core')
-rw-r--r--core/plugin/gtk/gtk.rb55
-rw-r--r--core/plugin/gui/hierarchy_child.rb5
-rw-r--r--core/plugin/gui/hierarchy_parent.rb10
-rw-r--r--core/plugin/gui/pane.rb2
-rw-r--r--core/plugin/gui/timeline.rb4
-rw-r--r--core/plugin/gui/window.rb2
6 files changed, 44 insertions, 34 deletions
diff --git a/core/plugin/gtk/gtk.rb b/core/plugin/gtk/gtk.rb
index 4a279d84..7b90fa07 100644
--- a/core/plugin/gtk/gtk.rb
+++ b/core/plugin/gtk/gtk.rb
@@ -57,7 +57,7 @@ Plugin.create :gtk do
# Gtk.main_quit
false }
window.ssc(:focus_in_event) {
- i_window.active!
+ i_window.active!(true, true)
false
}
window.ssc('key_press_event'){ |widget, event|
@@ -89,7 +89,7 @@ Plugin.create :gtk do
false }
pane.ssc(:switch_page){ |this, page, pagenum|
if pagenum == pane.page
- i_pane.set_active_child(pane.get_nth_page(pagenum).i_tab)
+ i_pane.set_active_child(pane.get_nth_page(pagenum).i_tab, true)
else
notice "switch_page: pagenum(#{pagenum}) != pane.page(#{pane.page})" end }
pane.signal_connect(:page_added){ |this, tabcontainer, index|
@@ -140,7 +140,7 @@ Plugin.create :gtk do
@profiletabs_by_slug[i_tab.slug] = tab end
tab_update_icon(i_tab)
tab.ssc(:focus_in_event) {
- i_tab.active!
+ i_tab.active!(true, true)
false
}
tab.ssc(:key_press_event){ |widget, event|
@@ -162,7 +162,7 @@ Plugin.create :gtk do
@timelines_by_slug[i_timeline.slug] = timeline
focus_in_event = lambda { |this, event|
if this.focus?
- i_timeline.active!
+ i_timeline.active!(true, true)
else
notice "timeline_created: focus_in_event: event receive but not has focus #{i_timeline}" end
false }
@@ -248,7 +248,7 @@ Plugin.create :gtk do
next if not postbox_parent
postbox = @postboxes_by_slug[i_postbox.slug] = postbox_parent.add_postbox(i_postbox)
postbox.post.ssc(:focus_in_event) {
- i_postbox.active!
+ i_postbox.active!(true, true)
false }
postbox.post.ssc('key_press_event'){ |widget, event|
Plugin::GUI.keypress(Gtk::keyname([event.keyval ,event.state]), i_postbox) }
@@ -347,28 +347,31 @@ Plugin.create :gtk do
if not statusbar.destroyed?
statusbar.remove(cid, mid) end } end end
- on_gui_child_activated do |i_parent, i_child|
+ on_gui_child_activated do |i_parent, i_child, by_toolkit|
type_strict i_parent => Plugin::GUI::HierarchyParent, i_child => Plugin::GUI::HierarchyChild
- if i_child.is_a?(Plugin::GUI::TabLike)
- i_pane = i_parent
- i_tab = i_child
- notice "gui_child_activated: tab active #{i_pane} => #{i_tab}"
- pane = widgetof(i_pane)
- tab = widgetof(i_tab)
- if pane and tab
- pagenum = pane.get_tab_pos_by_tab(tab)
- pane.page = pagenum if pagenum and pane.page != pagenum end
- elsif i_parent.is_a?(Plugin::GUI::Window)
- i_term = i_child.respond_to?(:active_chain) ? i_child.active_chain.last : i_child
- if i_term
- window = widgetof(i_parent)
- widget = widgetof(i_term)
- if window and widget
- notice "ACTIVATE! #{window} => #{widget}"
- if widget.respond_to? :active
- widget.active
- else
- window.set_focus(widget) end end end end end
+ if by_toolkit
+ notice "activate by toolkit. ignore."
+ else
+ if i_child.is_a?(Plugin::GUI::TabLike)
+ i_pane = i_parent
+ i_tab = i_child
+ notice "gui_child_activated: tab active #{i_pane} => #{i_tab}"
+ pane = widgetof(i_pane)
+ tab = widgetof(i_tab)
+ if pane and tab
+ pagenum = pane.get_tab_pos_by_tab(tab)
+ pane.page = pagenum if pagenum and pane.page != pagenum end
+ elsif i_parent.is_a?(Plugin::GUI::Window)
+ i_term = i_child.respond_to?(:active_chain) ? i_child.active_chain.last : i_child
+ if i_term
+ window = widgetof(i_parent)
+ widget = widgetof(i_term)
+ if window and widget
+ notice "ACTIVATE! #{window} => #{widget}"
+ if widget.respond_to? :active
+ widget.active
+ else
+ window.set_focus(widget) end end end end end end
filter_gui_postbox_input_editable do |i_postbox, editable|
postbox = widgetof(i_postbox)
diff --git a/core/plugin/gui/hierarchy_child.rb b/core/plugin/gui/hierarchy_child.rb
index ece0c607..95df48ba 100644
--- a/core/plugin/gui/hierarchy_child.rb
+++ b/core/plugin/gui/hierarchy_child.rb
@@ -44,10 +44,11 @@ module Plugin::GUI::HierarchyChild
# 親を再帰的に辿り、selfをアクティブに設定する
# ==== Args
# [just_this] 再帰的に呼び出されたのではなく、直接これをアクティブに指定されたなら真
+ # [by_toolkit] UIツールキットの入力でアクティブになった場合真
# ==== Return
# self
- def active!(just_this=true)
- @parent.set_active_child(self).active!(false)
+ def active!(just_this=true, by_toolkit=false)
+ @parent.set_active_child(self, by_toolkit).active!(false, by_toolkit)
self end
module Extended
diff --git a/core/plugin/gui/hierarchy_parent.rb b/core/plugin/gui/hierarchy_parent.rb
index af74c252..5ff9c28a 100644
--- a/core/plugin/gui/hierarchy_parent.rb
+++ b/core/plugin/gui/hierarchy_parent.rb
@@ -58,10 +58,16 @@ module Plugin::GUI::HierarchyParent
def children
@children ||= [] end
- def set_active_child(child)
+ # 子 _child_ をアクティブに設定する
+ # ==== Args
+ # [child] アクティブにする子
+ # [by_toolkit] UIツールキットの入力でアクティブになった場合真
+ # ==== Return
+ # self
+ def set_active_child(child, by_toolkit=false)
type_strict child => tcor(Plugin::GUI::HierarchyChild, NilClass)
@active_child = child
- Plugin.call(:gui_child_activated, self, child) if child
+ Plugin.call(:gui_child_activated, self, child, by_toolkit) if child
notice "active child set #{self.inspect} => #{child.inspect}"
self end
diff --git a/core/plugin/gui/pane.rb b/core/plugin/gui/pane.rb
index 251f6a24..694d4bb3 100644
--- a/core/plugin/gui/pane.rb
+++ b/core/plugin/gui/pane.rb
@@ -25,7 +25,7 @@ class Plugin::GUI::Pane
Plugin.call(:pane_created, self)
end
- def active!(just_this=true)
+ def active!(just_this=true, by_toolkit=false)
@@default = self
super end
diff --git a/core/plugin/gui/timeline.rb b/core/plugin/gui/timeline.rb
index 47c40be8..0eaf9edb 100644
--- a/core/plugin/gui/timeline.rb
+++ b/core/plugin/gui/timeline.rb
@@ -41,8 +41,8 @@ class Plugin::GUI::Timeline
# このタイムラインをアクティブにする。また、子のPostboxは非アクティブにする
# ==== Return
# self
- def active!(just_this=true)
- set_active_child(nil) if just_this
+ def active!(just_this=true, by_toolkit=false)
+ set_active_child(nil, by_toolkit) if just_this
super end
# 選択されているMessageを返す
diff --git a/core/plugin/gui/window.rb b/core/plugin/gui/window.rb
index fb74550f..cf053e9b 100644
--- a/core/plugin/gui/window.rb
+++ b/core/plugin/gui/window.rb
@@ -23,7 +23,7 @@ class Plugin::GUI::Window
end
# self がアクティブになったことを報告する
- def active!(just_this=true)
+ def active!(just_this=true, by_toolkit=false)
@@active = self
end