Skip to content
This repository was archived by the owner on Jun 17, 2024. It is now read-only.

Commit ea47465

Browse files
committed
feat: support close tab
1 parent 39fab9f commit ea47465

File tree

7 files changed

+67
-6
lines changed

7 files changed

+67
-6
lines changed

src/ui/components/frame-tab.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@ typedef struct FrameTabRec_ {
1313

1414
static LCUI_WidgetPrototype frame_tab_proto;
1515

16+
static void FrameTab_OnClose(LCUI_Widget w, LCUI_WidgetEvent e, void *arg)
17+
{
18+
LCUI_WidgetEventRec ev;
19+
20+
LCUI_InitWidgetEvent(&ev, "TabClose");
21+
Widget_TriggerEvent(e->data, &ev, NULL);
22+
}
23+
1624
static void FrameTab_OnInit(LCUI_Widget w)
1725
{
1826
FrameTab self;
@@ -33,6 +41,7 @@ static void FrameTab_OnInit(LCUI_Widget w)
3341
Widget_Append(w, self->text);
3442
Widget_Append(w, self->close);
3543
Widget_AddClass(w, "c-frame-tab");
44+
Widget_BindEvent(self->close, "click", FrameTab_OnClose, w, NULL);
3645
}
3746

3847
static void FrameTab_OnDestroy(LCUI_Widget w)

src/ui/stylesheets/_variables.scss

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,10 @@ $primary-text-color: #202124;
7777
$secondary-text-color: #5f6368;
7878
$green: #28a745;
7979

80-
$navbar-btn-bg-hover: $gray-200;
81-
$navbar-btn-bg-active: $gray-300;
80+
$browser-tabbar-bg: $gray-300;
81+
$navbar-btn-bg-hover: $gray-300;
82+
$navbar-btn-bg-active: $gray-400;
8283
$border-color: $gray-200;
8384
$navbar-input-bg: $gray-200;
8485
$navbar-input-bg-hover: $gray-300;
85-
$navbar-input-bg-focus: #fff;
86+
$navbar-input-bg-focus: #fff;

src/ui/stylesheets/components/_frame-tab.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
}
6060

6161
&:hover {
62-
background-color: rgba(255, 255, 255, 0.5);
62+
background-color: rgba(255, 255, 255, 0.6);
6363
}
6464

6565
&.active {

src/ui/stylesheets/views/_browser.scss

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
}
44

55
.v-browser__tabbar {
6-
background-color: $gray-300;
6+
background-color: $browser-tabbar-bg;
7+
padding: 8px 8px 0 8px;
78
}

src/ui/views/browser.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ static void BrowserView_OnDestroy(LCUI_Widget w)
4343
BrowserView self;
4444

4545
self = Widget_GetData(w, browser_proto);
46+
LinkedList_ClearData(&self->pages, free);
4647
}
4748

4849
static void BrowserView_OnPageTabClick(LCUI_Widget w, LCUI_WidgetEvent e,
@@ -54,6 +55,15 @@ static void BrowserView_OnPageTabClick(LCUI_Widget w, LCUI_WidgetEvent e,
5455
BrowserView_Active(page->browser, page->id);
5556
}
5657

58+
static void BrowserView_OnPageTabClose(LCUI_Widget w, LCUI_WidgetEvent e,
59+
void *arg)
60+
{
61+
Page page;
62+
63+
page = e->data;
64+
BrowserView_Close(page->browser, page->id);
65+
}
66+
5767
static void BrowserView_OnPageLoad(LCUI_Widget w, LCUI_WidgetEvent e, void *arg)
5868
{
5969
Page page;
@@ -99,6 +109,8 @@ int BrowserView_Load(LCUI_Widget w, const char *path)
99109
Widget_Append(self->tabbar, page->tab);
100110
Widget_BindEvent(page->tab, "mousedown", BrowserView_OnPageTabClick,
101111
page, NULL);
112+
Widget_BindEvent(page->tab, "TabClose", BrowserView_OnPageTabClose,
113+
page, NULL);
102114
Widget_BindEvent(page->frame, "PageLoad", BrowserView_OnPageLoad, page,
103115
NULL);
104116
Widget_BindEvent(page->frame, "PageLoaded", BrowserView_OnPageLoaded,
@@ -135,6 +147,42 @@ LCUI_BOOL BrowserView_Active(LCUI_Widget w, int id)
135147
return TRUE;
136148
}
137149

150+
LCUI_BOOL BrowserView_Close(LCUI_Widget w, int id)
151+
{
152+
Page page;
153+
BrowserView self;
154+
LinkedListNode *node;
155+
156+
self = Widget_GetData(w, browser_proto);
157+
for (LinkedList_Each(node, &self->pages)) {
158+
page = node->data;
159+
if (page->id != id) {
160+
continue;
161+
}
162+
Widget_Destroy(page->tab);
163+
Widget_Destroy(page->frame);
164+
if (self->current_page == page) {
165+
if (node->next) {
166+
page = node->next->data;
167+
} else if (node->prev) {
168+
page = node->prev->data;
169+
}
170+
self->current_page = page;
171+
if (page) {
172+
Widget_AddClass(page->tab, "active");
173+
Widget_Append(w, page->frame);
174+
}
175+
}
176+
LinkedList_Unlink(&self->pages, node);
177+
free(node->data);
178+
if (self->pages.length < 1) {
179+
LCUI_Quit();
180+
}
181+
return TRUE;
182+
}
183+
return FALSE;
184+
}
185+
138186
void UI_InitBrowserView(void)
139187
{
140188
browser_proto = LCUIWidget_NewPrototype("browser", NULL);

src/ui/views/browser.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ extern int BrowserView_Load(LCUI_Widget w, const char *path);
33

44
extern LCUI_BOOL BrowserView_Active(LCUI_Widget w, int id);
55

6+
extern LCUI_BOOL BrowserView_Close(LCUI_Widget w, int id);
7+
68
extern void UI_InitBrowserView(void);

src/ui/views/welcome.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ static void WelcomeView_OnInit(LCUI_Widget w)
2727
Widget_AddData(w, welcome_proto, 0);
2828
Widget_AddClass(w, "v-welcome");
2929
Widget_SetTitleW(w, L"Welcome!");
30-
LCUI_SetTimeout(1000, WelcomeView_OnTimer, w);
30+
LCUI_SetTimeout(500, WelcomeView_OnTimer, w);
3131
}
3232

3333
void UI_InitWelcomeView(void)

0 commit comments

Comments
 (0)