瀏覽代碼

LibGUI: Add hook when a context menu is requested on a tab

FalseHonesty 5 年之前
父節點
當前提交
bf2e6325a4
共有 2 個文件被更改,包括 17 次插入0 次删除
  1. 15 0
      Libraries/LibGUI/TabWidget.cpp
  2. 2 0
      Libraries/LibGUI/TabWidget.h

+ 15 - 0
Libraries/LibGUI/TabWidget.cpp

@@ -370,4 +370,19 @@ void TabWidget::keydown_event(KeyEvent& event)
     Widget::keydown_event(event);
 }
 
+void TabWidget::context_menu_event(ContextMenuEvent& context_menu_event)
+{
+    for (size_t i = 0; i < m_tabs.size(); ++i) {
+        auto button_rect = this->button_rect(i);
+        if (!button_rect.contains(context_menu_event.position()))
+            continue;
+        auto* widget = m_tabs[i].widget;
+        deferred_invoke([this, widget, context_menu_event](auto&) {
+            if (on_context_menu_request && widget)
+                on_context_menu_request(*widget, context_menu_event);
+        });
+        return;
+    }
+}
+
 }

+ 2 - 0
Libraries/LibGUI/TabWidget.h

@@ -84,6 +84,7 @@ public:
 
     Function<void(Widget&)> on_change;
     Function<void(Widget&)> on_middle_click;
+    Function<void(Widget&, const ContextMenuEvent&)> on_context_menu_request;
 
 protected:
     TabWidget();
@@ -95,6 +96,7 @@ protected:
     virtual void mousemove_event(MouseEvent&) override;
     virtual void leave_event(Core::Event&) override;
     virtual void keydown_event(KeyEvent&) override;
+    virtual void context_menu_event(ContextMenuEvent&) override;
 
 private:
     Gfx::Rect child_rect_for_size(const Gfx::Size&) const;