mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 12:05:15 +00:00
UI/AppKit: Remove the built-in Inspector widget
This commit is contained in:
parent
bb87de58a0
commit
03735cf11d
Notes:
github-actions[bot]
2025-03-15 18:11:08 +00:00
Author: https://github.com/trflynn89 Commit: https://github.com/LadybirdBrowser/ladybird/commit/03735cf11da Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3956
10 changed files with 0 additions and 558 deletions
|
@ -608,9 +608,6 @@
|
|||
[submenu addItem:[[NSMenuItem alloc] initWithTitle:@"View Source"
|
||||
action:@selector(viewSource:)
|
||||
keyEquivalent:@""]];
|
||||
[submenu addItem:[[NSMenuItem alloc] initWithTitle:@"Open Inspector"
|
||||
action:@selector(openInspector:)
|
||||
keyEquivalent:@"I"]];
|
||||
[submenu addItem:[[NSMenuItem alloc] initWithTitle:@"Open Task Manager"
|
||||
action:@selector(openTaskManager:)
|
||||
keyEquivalent:@"M"]];
|
||||
|
|
|
@ -3,8 +3,6 @@ add_library(ladybird_impl STATIC
|
|||
Application/Application.mm
|
||||
Application/ApplicationDelegate.mm
|
||||
Interface/Event.mm
|
||||
Interface/Inspector.mm
|
||||
Interface/InspectorController.mm
|
||||
Interface/LadybirdWebView.mm
|
||||
Interface/LadybirdWebViewBridge.cpp
|
||||
Interface/LadybirdWebViewWindow.mm
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2023-2024, Tim Flynn <trflynn89@ladybird.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <Interface/LadybirdWebViewWindow.h>
|
||||
|
||||
@class LadybirdWebView;
|
||||
@class Tab;
|
||||
|
||||
@interface Inspector : LadybirdWebViewWindow
|
||||
|
||||
- (instancetype)init:(Tab*)tab;
|
||||
|
||||
- (void)inspect;
|
||||
- (void)reset;
|
||||
|
||||
- (void)selectHoveredElement;
|
||||
|
||||
@end
|
|
@ -1,372 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2023-2024, Tim Flynn <trflynn89@ladybird.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibWeb/Cookie/Cookie.h>
|
||||
#include <LibWebView/Attribute.h>
|
||||
#include <LibWebView/InspectorClient.h>
|
||||
#include <LibWebView/ViewImplementation.h>
|
||||
|
||||
#import <Interface/Event.h>
|
||||
#import <Interface/Inspector.h>
|
||||
#import <Interface/LadybirdWebView.h>
|
||||
#import <Interface/Tab.h>
|
||||
#import <Utilities/Conversions.h>
|
||||
|
||||
#if !__has_feature(objc_arc)
|
||||
# error "This project requires ARC"
|
||||
#endif
|
||||
|
||||
static constexpr CGFloat const WINDOW_WIDTH = 875;
|
||||
static constexpr CGFloat const WINDOW_HEIGHT = 825;
|
||||
|
||||
static constexpr NSInteger CONTEXT_MENU_EDIT_NODE_TAG = 1;
|
||||
static constexpr NSInteger CONTEXT_MENU_REMOVE_ATTRIBUTE_TAG = 2;
|
||||
static constexpr NSInteger CONTEXT_MENU_COPY_ATTRIBUTE_VALUE_TAG = 3;
|
||||
static constexpr NSInteger CONTEXT_MENU_DELETE_COOKIE_TAG = 4;
|
||||
|
||||
@interface Inspector ()
|
||||
{
|
||||
OwnPtr<WebView::InspectorClient> m_inspector_client;
|
||||
}
|
||||
|
||||
@property (nonatomic, strong) Tab* tab;
|
||||
|
||||
@property (nonatomic, strong) NSMenu* dom_node_text_context_menu;
|
||||
@property (nonatomic, strong) NSMenu* dom_node_tag_context_menu;
|
||||
@property (nonatomic, strong) NSMenu* dom_node_attribute_context_menu;
|
||||
@property (nonatomic, strong) NSMenu* cookie_context_menu;
|
||||
|
||||
@end
|
||||
|
||||
@implementation Inspector
|
||||
|
||||
@synthesize tab = _tab;
|
||||
@synthesize dom_node_text_context_menu = _dom_node_text_context_menu;
|
||||
@synthesize dom_node_tag_context_menu = _dom_node_tag_context_menu;
|
||||
@synthesize dom_node_attribute_context_menu = _dom_node_attribute_context_menu;
|
||||
@synthesize cookie_context_menu = _cookie_context_menu;
|
||||
|
||||
- (instancetype)init:(Tab*)tab
|
||||
{
|
||||
auto tab_rect = [tab frame];
|
||||
auto position_x = tab_rect.origin.x + (tab_rect.size.width - WINDOW_WIDTH) / 2;
|
||||
auto position_y = tab_rect.origin.y + (tab_rect.size.height - WINDOW_HEIGHT) / 2;
|
||||
auto window_rect = NSMakeRect(position_x, position_y, WINDOW_WIDTH, WINDOW_HEIGHT);
|
||||
|
||||
if (self = [super initWithWebView:nil windowRect:window_rect]) {
|
||||
self.tab = tab;
|
||||
|
||||
m_inspector_client = make<WebView::InspectorClient>([[tab web_view] view], [[self web_view] view]);
|
||||
__weak Inspector* weak_self = self;
|
||||
|
||||
m_inspector_client->on_requested_dom_node_text_context_menu = [weak_self](auto position) {
|
||||
Inspector* strong_self = weak_self;
|
||||
if (strong_self == nil) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto* event = Ladybird::create_context_menu_mouse_event(strong_self.web_view, position);
|
||||
[NSMenu popUpContextMenu:strong_self.dom_node_text_context_menu withEvent:event forView:strong_self.web_view];
|
||||
};
|
||||
|
||||
m_inspector_client->on_requested_dom_node_tag_context_menu = [weak_self](auto position, auto const& tag) {
|
||||
Inspector* strong_self = weak_self;
|
||||
if (strong_self == nil) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto edit_node_text = MUST(String::formatted("Edit \"{}\"", tag));
|
||||
|
||||
auto* edit_node_menu_item = [strong_self.dom_node_tag_context_menu itemWithTag:CONTEXT_MENU_EDIT_NODE_TAG];
|
||||
[edit_node_menu_item setTitle:Ladybird::string_to_ns_string(edit_node_text)];
|
||||
|
||||
auto* event = Ladybird::create_context_menu_mouse_event(strong_self.web_view, position);
|
||||
[NSMenu popUpContextMenu:strong_self.dom_node_tag_context_menu withEvent:event forView:strong_self.web_view];
|
||||
};
|
||||
|
||||
m_inspector_client->on_requested_dom_node_attribute_context_menu = [weak_self](auto position, auto const&, auto const& attribute) {
|
||||
Inspector* strong_self = weak_self;
|
||||
if (strong_self == nil) {
|
||||
return;
|
||||
}
|
||||
|
||||
static constexpr size_t MAX_ATTRIBUTE_VALUE_LENGTH = 32;
|
||||
|
||||
auto edit_attribute_text = MUST(String::formatted("Edit attribute \"{}\"", attribute.name));
|
||||
auto remove_attribute_text = MUST(String::formatted("Remove attribute \"{}\"", attribute.name));
|
||||
auto copy_attribute_value_text = MUST(String::formatted("Copy attribute value \"{:.{}}{}\"",
|
||||
attribute.value, MAX_ATTRIBUTE_VALUE_LENGTH,
|
||||
attribute.value.bytes_as_string_view().length() > MAX_ATTRIBUTE_VALUE_LENGTH ? "..."sv : ""sv));
|
||||
|
||||
auto* edit_node_menu_item = [strong_self.dom_node_attribute_context_menu itemWithTag:CONTEXT_MENU_EDIT_NODE_TAG];
|
||||
[edit_node_menu_item setTitle:Ladybird::string_to_ns_string(edit_attribute_text)];
|
||||
|
||||
auto* remove_attribute_menu_item = [strong_self.dom_node_attribute_context_menu itemWithTag:CONTEXT_MENU_REMOVE_ATTRIBUTE_TAG];
|
||||
[remove_attribute_menu_item setTitle:Ladybird::string_to_ns_string(remove_attribute_text)];
|
||||
|
||||
auto* copy_attribute_value_menu_item = [strong_self.dom_node_attribute_context_menu itemWithTag:CONTEXT_MENU_COPY_ATTRIBUTE_VALUE_TAG];
|
||||
[copy_attribute_value_menu_item setTitle:Ladybird::string_to_ns_string(copy_attribute_value_text)];
|
||||
|
||||
auto* event = Ladybird::create_context_menu_mouse_event(strong_self.web_view, position);
|
||||
[NSMenu popUpContextMenu:strong_self.dom_node_attribute_context_menu withEvent:event forView:strong_self.web_view];
|
||||
};
|
||||
|
||||
m_inspector_client->on_requested_cookie_context_menu = [weak_self](auto position, auto const& cookie) {
|
||||
Inspector* strong_self = weak_self;
|
||||
if (strong_self == nil) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto delete_cookie_text = MUST(String::formatted("Delete \"{}\"", cookie.name));
|
||||
|
||||
auto* delete_cookie_item = [strong_self.cookie_context_menu itemWithTag:CONTEXT_MENU_DELETE_COOKIE_TAG];
|
||||
[delete_cookie_item setTitle:Ladybird::string_to_ns_string(delete_cookie_text)];
|
||||
|
||||
auto* event = Ladybird::create_context_menu_mouse_event(strong_self.web_view, position);
|
||||
[NSMenu popUpContextMenu:strong_self.cookie_context_menu withEvent:event forView:strong_self.web_view];
|
||||
};
|
||||
|
||||
[self setContentView:self.web_view];
|
||||
[self setTitle:@"Inspector"];
|
||||
[self setIsVisible:YES];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
auto& web_view = [[self.tab web_view] view];
|
||||
web_view.clear_inspected_dom_node();
|
||||
}
|
||||
|
||||
#pragma mark - Public methods
|
||||
|
||||
- (void)inspect
|
||||
{
|
||||
m_inspector_client->inspect();
|
||||
}
|
||||
|
||||
- (void)reset
|
||||
{
|
||||
m_inspector_client->reset();
|
||||
}
|
||||
|
||||
- (void)selectHoveredElement
|
||||
{
|
||||
m_inspector_client->select_hovered_node();
|
||||
}
|
||||
|
||||
#pragma mark - Private methods
|
||||
|
||||
- (void)editDOMNode:(id)sender
|
||||
{
|
||||
m_inspector_client->context_menu_edit_dom_node();
|
||||
}
|
||||
|
||||
- (void)copyDOMNode:(id)sender
|
||||
{
|
||||
m_inspector_client->context_menu_copy_dom_node();
|
||||
}
|
||||
|
||||
- (void)screenshotDOMNode:(id)sender
|
||||
{
|
||||
m_inspector_client->context_menu_screenshot_dom_node();
|
||||
}
|
||||
|
||||
- (void)createChildElement:(id)sender
|
||||
{
|
||||
m_inspector_client->context_menu_create_child_element();
|
||||
}
|
||||
|
||||
- (void)createChildTextNode:(id)sender
|
||||
{
|
||||
m_inspector_client->context_menu_create_child_text_node();
|
||||
}
|
||||
|
||||
- (void)cloneDOMNode:(id)sender
|
||||
{
|
||||
m_inspector_client->context_menu_clone_dom_node();
|
||||
}
|
||||
|
||||
- (void)deleteDOMNode:(id)sender
|
||||
{
|
||||
m_inspector_client->context_menu_remove_dom_node();
|
||||
}
|
||||
|
||||
- (void)addDOMAttribute:(id)sender
|
||||
{
|
||||
m_inspector_client->context_menu_add_dom_node_attribute();
|
||||
}
|
||||
|
||||
- (void)removeDOMAttribute:(id)sender
|
||||
{
|
||||
m_inspector_client->context_menu_remove_dom_node_attribute();
|
||||
}
|
||||
|
||||
- (void)copyDOMAttributeValue:(id)sender
|
||||
{
|
||||
m_inspector_client->context_menu_copy_dom_node_attribute_value();
|
||||
}
|
||||
|
||||
- (void)deleteCookie:(id)sender
|
||||
{
|
||||
m_inspector_client->context_menu_delete_cookie();
|
||||
}
|
||||
|
||||
- (void)deleteAllCookies:(id)sender
|
||||
{
|
||||
m_inspector_client->context_menu_delete_all_cookies();
|
||||
}
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
+ (NSMenuItem*)make_create_child_menu
|
||||
{
|
||||
auto* create_child_menu = [[NSMenu alloc] init];
|
||||
[create_child_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Create child element"
|
||||
action:@selector(createChildElement:)
|
||||
keyEquivalent:@""]];
|
||||
[create_child_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Create child text node"
|
||||
action:@selector(createChildTextNode:)
|
||||
keyEquivalent:@""]];
|
||||
|
||||
auto* create_child_menu_item = [[NSMenuItem alloc] initWithTitle:@"Create child"
|
||||
action:nil
|
||||
keyEquivalent:@""];
|
||||
[create_child_menu_item setSubmenu:create_child_menu];
|
||||
|
||||
return create_child_menu_item;
|
||||
}
|
||||
|
||||
- (NSMenu*)dom_node_text_context_menu
|
||||
{
|
||||
if (!_dom_node_text_context_menu) {
|
||||
_dom_node_text_context_menu = [[NSMenu alloc] initWithTitle:@"DOM Text Context Menu"];
|
||||
|
||||
[_dom_node_text_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Edit text"
|
||||
action:@selector(editDOMNode:)
|
||||
keyEquivalent:@""]];
|
||||
[_dom_node_text_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Copy text"
|
||||
action:@selector(copyDOMNode:)
|
||||
keyEquivalent:@""]];
|
||||
|
||||
[_dom_node_text_context_menu addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
[_dom_node_text_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Delete node"
|
||||
action:@selector(deleteDOMNode:)
|
||||
keyEquivalent:@""]];
|
||||
}
|
||||
|
||||
return _dom_node_text_context_menu;
|
||||
}
|
||||
|
||||
- (NSMenu*)dom_node_tag_context_menu
|
||||
{
|
||||
if (!_dom_node_tag_context_menu) {
|
||||
_dom_node_tag_context_menu = [[NSMenu alloc] initWithTitle:@"DOM Tag Context Menu"];
|
||||
|
||||
auto* edit_node_menu_item = [[NSMenuItem alloc] initWithTitle:@"Edit tag"
|
||||
action:@selector(editDOMNode:)
|
||||
keyEquivalent:@""];
|
||||
[edit_node_menu_item setTag:CONTEXT_MENU_EDIT_NODE_TAG];
|
||||
[_dom_node_tag_context_menu addItem:edit_node_menu_item];
|
||||
|
||||
[_dom_node_tag_context_menu addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
[_dom_node_tag_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Add attribute"
|
||||
action:@selector(addDOMAttribute:)
|
||||
keyEquivalent:@""]];
|
||||
[_dom_node_tag_context_menu addItem:[Inspector make_create_child_menu]];
|
||||
[_dom_node_tag_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Clone node"
|
||||
action:@selector(cloneDOMNode:)
|
||||
keyEquivalent:@""]];
|
||||
[_dom_node_tag_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Delete node"
|
||||
action:@selector(deleteDOMNode:)
|
||||
keyEquivalent:@""]];
|
||||
|
||||
[_dom_node_tag_context_menu addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
[_dom_node_tag_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Copy HTML"
|
||||
action:@selector(copyDOMNode:)
|
||||
keyEquivalent:@""]];
|
||||
[_dom_node_tag_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Take node screenshot"
|
||||
action:@selector(screenshotDOMNode:)
|
||||
keyEquivalent:@""]];
|
||||
}
|
||||
|
||||
return _dom_node_tag_context_menu;
|
||||
}
|
||||
|
||||
- (NSMenu*)dom_node_attribute_context_menu
|
||||
{
|
||||
if (!_dom_node_attribute_context_menu) {
|
||||
_dom_node_attribute_context_menu = [[NSMenu alloc] initWithTitle:@"DOM Attribute Context Menu"];
|
||||
|
||||
auto* edit_node_menu_item = [[NSMenuItem alloc] initWithTitle:@"Edit attribute"
|
||||
action:@selector(editDOMNode:)
|
||||
keyEquivalent:@""];
|
||||
[edit_node_menu_item setTag:CONTEXT_MENU_EDIT_NODE_TAG];
|
||||
[_dom_node_attribute_context_menu addItem:edit_node_menu_item];
|
||||
|
||||
auto* remove_attribute_menu_item = [[NSMenuItem alloc] initWithTitle:@"Remove attribute"
|
||||
action:@selector(removeDOMAttribute:)
|
||||
keyEquivalent:@""];
|
||||
[remove_attribute_menu_item setTag:CONTEXT_MENU_REMOVE_ATTRIBUTE_TAG];
|
||||
[_dom_node_attribute_context_menu addItem:remove_attribute_menu_item];
|
||||
|
||||
auto* copy_attribute_value_menu_item = [[NSMenuItem alloc] initWithTitle:@"Copy attribute value"
|
||||
action:@selector(copyDOMAttributeValue:)
|
||||
keyEquivalent:@""];
|
||||
[copy_attribute_value_menu_item setTag:CONTEXT_MENU_COPY_ATTRIBUTE_VALUE_TAG];
|
||||
[_dom_node_attribute_context_menu addItem:copy_attribute_value_menu_item];
|
||||
|
||||
[_dom_node_attribute_context_menu addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
[_dom_node_attribute_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Add attribute"
|
||||
action:@selector(addDOMAttribute:)
|
||||
keyEquivalent:@""]];
|
||||
[_dom_node_attribute_context_menu addItem:[Inspector make_create_child_menu]];
|
||||
[_dom_node_attribute_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Clone node"
|
||||
action:@selector(cloneDOMNode:)
|
||||
keyEquivalent:@""]];
|
||||
[_dom_node_attribute_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Delete node"
|
||||
action:@selector(deleteDOMNode:)
|
||||
keyEquivalent:@""]];
|
||||
|
||||
[_dom_node_attribute_context_menu addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
[_dom_node_attribute_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Copy HTML"
|
||||
action:@selector(copyDOMNode:)
|
||||
keyEquivalent:@""]];
|
||||
[_dom_node_attribute_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Take node screenshot"
|
||||
action:@selector(screenshotDOMNode:)
|
||||
keyEquivalent:@""]];
|
||||
}
|
||||
|
||||
return _dom_node_attribute_context_menu;
|
||||
}
|
||||
|
||||
- (NSMenu*)cookie_context_menu
|
||||
{
|
||||
if (!_cookie_context_menu) {
|
||||
_cookie_context_menu = [[NSMenu alloc] initWithTitle:@"Cookie Context Menu"];
|
||||
|
||||
auto* delete_cookie_item = [[NSMenuItem alloc] initWithTitle:@"Delete cookie"
|
||||
action:@selector(deleteCookie:)
|
||||
keyEquivalent:@""];
|
||||
[delete_cookie_item setTag:CONTEXT_MENU_DELETE_COOKIE_TAG];
|
||||
[_cookie_context_menu addItem:delete_cookie_item];
|
||||
|
||||
[_cookie_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Delete all cookies"
|
||||
action:@selector(deleteAllCookies:)
|
||||
keyEquivalent:@""]];
|
||||
}
|
||||
|
||||
return _cookie_context_menu;
|
||||
}
|
||||
|
||||
@end
|
|
@ -1,17 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@class Tab;
|
||||
|
||||
@interface InspectorController : NSWindowController
|
||||
|
||||
- (instancetype)init:(Tab*)tab;
|
||||
|
||||
@end
|
|
@ -1,66 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#import <Interface/Inspector.h>
|
||||
#import <Interface/InspectorController.h>
|
||||
#import <Interface/LadybirdWebView.h>
|
||||
#import <Interface/Tab.h>
|
||||
|
||||
#if !__has_feature(objc_arc)
|
||||
# error "This project requires ARC"
|
||||
#endif
|
||||
|
||||
@interface InspectorController () <NSWindowDelegate>
|
||||
|
||||
@property (nonatomic, strong) Tab* tab;
|
||||
|
||||
@end
|
||||
|
||||
@implementation InspectorController
|
||||
|
||||
- (instancetype)init:(Tab*)tab
|
||||
{
|
||||
if (self = [super init]) {
|
||||
self.tab = tab;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
#pragma mark - Private methods
|
||||
|
||||
- (Inspector*)inspector
|
||||
{
|
||||
return (Inspector*)[self window];
|
||||
}
|
||||
|
||||
#pragma mark - NSWindowController
|
||||
|
||||
- (IBAction)showWindow:(id)sender
|
||||
{
|
||||
self.window = [[Inspector alloc] init:self.tab];
|
||||
[self.window setDelegate:self];
|
||||
[self.window makeKeyAndOrderFront:sender];
|
||||
}
|
||||
|
||||
#pragma mark - NSWindowDelegate
|
||||
|
||||
- (void)windowWillClose:(NSNotification*)notification
|
||||
{
|
||||
[self.tab onInspectorClosed];
|
||||
}
|
||||
|
||||
- (void)windowDidResize:(NSNotification*)notification
|
||||
{
|
||||
[[[self inspector] web_view] handleResize];
|
||||
}
|
||||
|
||||
- (void)windowDidChangeBackingProperties:(NSNotification*)notification
|
||||
{
|
||||
[[[self inspector] web_view] handleDevicePixelRatioChange];
|
||||
}
|
||||
|
||||
@end
|
|
@ -1294,9 +1294,6 @@ static void copy_data_to_clipboard(StringView data, NSPasteboardType pasteboard_
|
|||
[_page_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"View Source"
|
||||
action:@selector(viewSource:)
|
||||
keyEquivalent:@""]];
|
||||
[_page_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Inspect Element"
|
||||
action:@selector(inspectElement:)
|
||||
keyEquivalent:@""]];
|
||||
}
|
||||
|
||||
return _page_context_menu;
|
||||
|
@ -1320,11 +1317,6 @@ static void copy_data_to_clipboard(StringView data, NSPasteboardType pasteboard_
|
|||
keyEquivalent:@""];
|
||||
[copy_link_menu_item setTag:CONTEXT_MENU_COPY_LINK_TAG];
|
||||
[_link_context_menu addItem:copy_link_menu_item];
|
||||
[_link_context_menu addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
[_link_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Inspect Element"
|
||||
action:@selector(inspectElement:)
|
||||
keyEquivalent:@""]];
|
||||
}
|
||||
|
||||
return _link_context_menu;
|
||||
|
@ -1353,11 +1345,6 @@ static void copy_data_to_clipboard(StringView data, NSPasteboardType pasteboard_
|
|||
[_image_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Copy Image URL"
|
||||
action:@selector(copyLink:)
|
||||
keyEquivalent:@""]];
|
||||
[_image_context_menu addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
[_image_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Inspect Element"
|
||||
action:@selector(inspectElement:)
|
||||
keyEquivalent:@""]];
|
||||
}
|
||||
|
||||
return _image_context_menu;
|
||||
|
@ -1405,11 +1392,6 @@ static void copy_data_to_clipboard(StringView data, NSPasteboardType pasteboard_
|
|||
[_audio_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Copy Audio URL"
|
||||
action:@selector(copyLink:)
|
||||
keyEquivalent:@""]];
|
||||
[_audio_context_menu addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
[_audio_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Inspect Element"
|
||||
action:@selector(inspectElement:)
|
||||
keyEquivalent:@""]];
|
||||
}
|
||||
|
||||
return _audio_context_menu;
|
||||
|
@ -1457,11 +1439,6 @@ static void copy_data_to_clipboard(StringView data, NSPasteboardType pasteboard_
|
|||
[_video_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Copy Video URL"
|
||||
action:@selector(copyLink:)
|
||||
keyEquivalent:@""]];
|
||||
[_video_context_menu addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
[_video_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Inspect Element"
|
||||
action:@selector(inspectElement:)
|
||||
keyEquivalent:@""]];
|
||||
}
|
||||
|
||||
return _video_context_menu;
|
||||
|
|
|
@ -19,9 +19,4 @@
|
|||
- (instancetype)initAsChild:(Tab*)parent
|
||||
pageIndex:(u64)page_index;
|
||||
|
||||
- (void)tabWillClose;
|
||||
|
||||
- (void)openInspector:(id)sender;
|
||||
- (void)onInspectorClosed;
|
||||
|
||||
@end
|
||||
|
|
|
@ -12,8 +12,6 @@
|
|||
#include <LibWebView/ViewImplementation.h>
|
||||
|
||||
#import <Application/ApplicationDelegate.h>
|
||||
#import <Interface/Inspector.h>
|
||||
#import <Interface/InspectorController.h>
|
||||
#import <Interface/LadybirdWebView.h>
|
||||
#import <Interface/SearchPanel.h>
|
||||
#import <Interface/Tab.h>
|
||||
|
@ -34,8 +32,6 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800;
|
|||
|
||||
@property (nonatomic, strong) SearchPanel* search_panel;
|
||||
|
||||
@property (nonatomic, strong) InspectorController* inspector_controller;
|
||||
|
||||
@end
|
||||
|
||||
@implementation Tab
|
||||
|
@ -129,37 +125,6 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800;
|
|||
[self.search_panel useSelectionForFind:sender];
|
||||
}
|
||||
|
||||
- (void)tabWillClose
|
||||
{
|
||||
if (self.inspector_controller != nil) {
|
||||
[self.inspector_controller.window close];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)openInspector:(id)sender
|
||||
{
|
||||
if (self.inspector_controller != nil) {
|
||||
[self.inspector_controller.window makeKeyAndOrderFront:sender];
|
||||
return;
|
||||
}
|
||||
|
||||
self.inspector_controller = [[InspectorController alloc] init:self];
|
||||
[self.inspector_controller showWindow:nil];
|
||||
}
|
||||
|
||||
- (void)onInspectorClosed
|
||||
{
|
||||
self.inspector_controller = nil;
|
||||
}
|
||||
|
||||
- (void)inspectElement:(id)sender
|
||||
{
|
||||
[self openInspector:sender];
|
||||
|
||||
auto* inspector = (Inspector*)[self.inspector_controller window];
|
||||
[inspector selectHoveredElement];
|
||||
}
|
||||
|
||||
#pragma mark - Private methods
|
||||
|
||||
- (TabController*)tabController
|
||||
|
@ -310,19 +275,10 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800;
|
|||
[self updateTabTitleAndFavicon];
|
||||
|
||||
[[self tabController] onLoadStart:url isRedirect:is_redirect];
|
||||
|
||||
if (self.inspector_controller != nil) {
|
||||
auto* inspector = (Inspector*)[self.inspector_controller window];
|
||||
[inspector reset];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)onLoadFinish:(URL::URL const&)url
|
||||
{
|
||||
if (self.inspector_controller != nil) {
|
||||
auto* inspector = (Inspector*)[self.inspector_controller window];
|
||||
[inspector inspect];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)onURLChange:(URL::URL const&)url
|
||||
|
|
|
@ -604,8 +604,6 @@ static NSString* const TOOLBAR_TAB_OVERVIEW_IDENTIFIER = @"ToolbarTabOverviewIde
|
|||
|
||||
- (void)windowWillClose:(NSNotification*)notification
|
||||
{
|
||||
[[self tab] tabWillClose];
|
||||
|
||||
auto* delegate = (ApplicationDelegate*)[NSApp delegate];
|
||||
[delegate removeTab:self];
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue