summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/sidebarwidget.c32
-rw-r--r--src/ui/util.c11
2 files changed, 20 insertions, 23 deletions
diff --git a/src/ui/sidebarwidget.c b/src/ui/sidebarwidget.c
index eae0432f..3d785e0a 100644
--- a/src/ui/sidebarwidget.c
+++ b/src/ui/sidebarwidget.c
@@ -106,7 +106,8 @@ struct Impl_SidebarWidget {
106 size_t numUnreadEntries; 106 size_t numUnreadEntries;
107 iWidget * resizer; 107 iWidget * resizer;
108 iWidget * menu; 108 iWidget * menu;
109 iSidebarItem * contextItem; /* list item accessed in the context menu */ 109 iSidebarItem * contextItem; /* list item accessed in the context menu */
110 size_t contextIndex; /* index of list item accessed in the context menu */
110}; 111};
111 112
112iDefineObjectConstructionArgs(SidebarWidget, (enum iSidebarSide side), side) 113iDefineObjectConstructionArgs(SidebarWidget, (enum iSidebarSide side), side)
@@ -644,6 +645,7 @@ void init_SidebarWidget(iSidebarWidget *d, enum iSidebarSide side) {
644 "actions"); 645 "actions");
645 setBackgroundColor_Widget(d->actions, uiBackgroundSidebar_ColorId); 646 setBackgroundColor_Widget(d->actions, uiBackgroundSidebar_ColorId);
646 d->contextItem = NULL; 647 d->contextItem = NULL;
648 d->contextIndex = iInvalidPos;
647 d->blank = new_Widget(); 649 d->blank = new_Widget();
648 addChildFlags_Widget(content, iClob(d->blank), resizeChildren_WidgetFlag); 650 addChildFlags_Widget(content, iClob(d->blank), resizeChildren_WidgetFlag);
649 addChildFlags_Widget(vdiv, iClob(content), expand_WidgetFlag); 651 addChildFlags_Widget(vdiv, iClob(content), expand_WidgetFlag);
@@ -844,7 +846,6 @@ iBool handleBookmarkEditorCommands_SidebarWidget_(iWidget *editor, const char *c
844 isSelected_Widget(findChild_Widget(editor, "bmed.tag.linksplit"))); 846 isSelected_Widget(findChild_Widget(editor, "bmed.tag.linksplit")));
845 postCommand_App("bookmarks.changed"); 847 postCommand_App("bookmarks.changed");
846 } 848 }
847 setFlags_Widget(as_Widget(d), disabled_WidgetFlag, iFalse);
848 destroy_Widget(editor); 849 destroy_Widget(editor);
849 return iTrue; 850 return iTrue;
850 } 851 }
@@ -985,11 +986,8 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
985 itemClicked_SidebarWidget_(d, pointerLabel_Command(cmd, "item")); 986 itemClicked_SidebarWidget_(d, pointerLabel_Command(cmd, "item"));
986 return iTrue; 987 return iTrue;
987 } 988 }
988 else if (isCommand_Widget(w, ev, "menu.opened")) {
989 setFlags_Widget(as_Widget(d->list), disabled_WidgetFlag, iTrue);
990 }
991 else if (isCommand_Widget(w, ev, "menu.closed")) { 989 else if (isCommand_Widget(w, ev, "menu.closed")) {
992 setFlags_Widget(as_Widget(d->list), disabled_WidgetFlag, iFalse); 990 // invalidateItem_ListWidget(d->list, d->contextIndex);
993 } 991 }
994 else if (isCommand_Widget(w, ev, "bookmark.open")) { 992 else if (isCommand_Widget(w, ev, "bookmark.open")) {
995 const iSidebarItem *item = d->contextItem; 993 const iSidebarItem *item = d->contextItem;
@@ -1010,7 +1008,6 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1010 else if (isCommand_Widget(w, ev, "bookmark.edit")) { 1008 else if (isCommand_Widget(w, ev, "bookmark.edit")) {
1011 const iSidebarItem *item = d->contextItem; 1009 const iSidebarItem *item = d->contextItem;
1012 if (d->mode == bookmarks_SidebarMode && item) { 1010 if (d->mode == bookmarks_SidebarMode && item) {
1013 setFlags_Widget(w, disabled_WidgetFlag, iTrue);
1014 iWidget *dlg = makeBookmarkEditor_Widget(); 1011 iWidget *dlg = makeBookmarkEditor_Widget();
1015 setId_Widget(dlg, format_CStr("bmed.%s", cstr_String(id_Widget(w)))); 1012 setId_Widget(dlg, format_CStr("bmed.%s", cstr_String(id_Widget(w))));
1016 iBookmark *bm = get_Bookmarks(bookmarks_App(), item->id); 1013 iBookmark *bm = get_Bookmarks(bookmarks_App(), item->id);
@@ -1038,7 +1035,6 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1038 else if (isCommand_Widget(w, ev, "bookmark.dup")) { 1035 else if (isCommand_Widget(w, ev, "bookmark.dup")) {
1039 const iSidebarItem *item = d->contextItem; 1036 const iSidebarItem *item = d->contextItem;
1040 if (d->mode == bookmarks_SidebarMode && item) { 1037 if (d->mode == bookmarks_SidebarMode && item) {
1041 setFlags_Widget(w, disabled_WidgetFlag, iTrue);
1042 iBookmark *bm = get_Bookmarks(bookmarks_App(), item->id); 1038 iBookmark *bm = get_Bookmarks(bookmarks_App(), item->id);
1043 const iBool isRemote = hasTag_Bookmark(bm, remote_BookmarkTag); 1039 const iBool isRemote = hasTag_Bookmark(bm, remote_BookmarkTag);
1044 iChar icon = isRemote ? 0x1f588 : bm->icon; 1040 iChar icon = isRemote ? 0x1f588 : bm->icon;
@@ -1131,7 +1127,6 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1131 return iTrue; 1127 return iTrue;
1132 } 1128 }
1133 if (isCommand_Widget(w, ev, "feed.entry.edit")) { 1129 if (isCommand_Widget(w, ev, "feed.entry.edit")) {
1134 setFlags_Widget(w, disabled_WidgetFlag, iTrue);
1135 makeFeedSettings_Widget(id_Bookmark(feedBookmark)); 1130 makeFeedSettings_Widget(id_Bookmark(feedBookmark));
1136 return iTrue; 1131 return iTrue;
1137 } 1132 }
@@ -1307,6 +1302,10 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1307 setCursor_Window(get_Window(), SDL_SYSTEM_CURSOR_ARROW); 1302 setCursor_Window(get_Window(), SDL_SYSTEM_CURSOR_ARROW);
1308 } 1303 }
1309 } 1304 }
1305 if (d->contextIndex != iInvalidPos) {
1306 invalidateItem_ListWidget(d->list, d->contextIndex);
1307 d->contextIndex = iInvalidPos;
1308 }
1310 } 1309 }
1311 if (d->menu && ev->type == SDL_MOUSEBUTTONDOWN) { 1310 if (d->menu && ev->type == SDL_MOUSEBUTTONDOWN) {
1312 if (ev->button.button == SDL_BUTTON_RIGHT) { 1311 if (ev->button.button == SDL_BUTTON_RIGHT) {
@@ -1315,7 +1314,12 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1315 updateMouseHover_ListWidget(d->list); 1314 updateMouseHover_ListWidget(d->list);
1316 } 1315 }
1317 if (constHoverItem_ListWidget(d->list) || isVisible_Widget(d->menu)) { 1316 if (constHoverItem_ListWidget(d->list) || isVisible_Widget(d->menu)) {
1318 d->contextItem = hoverItem_ListWidget(d->list); 1317 d->contextItem = hoverItem_ListWidget(d->list);
1318 /* Context is drawn in hover state. */
1319 if (d->contextIndex != iInvalidPos) {
1320 invalidateItem_ListWidget(d->list, d->contextIndex);
1321 }
1322 d->contextIndex = hoverItemIndex_ListWidget(d->list);
1319 /* Update menu items. */ 1323 /* Update menu items. */
1320 /* TODO: Some callback-based mechanism would be nice for updating menus right 1324 /* TODO: Some callback-based mechanism would be nice for updating menus right
1321 before they open? */ 1325 before they open? */
@@ -1436,9 +1440,13 @@ static void draw_SidebarItem_(const iSidebarItem *d, iPaint *p, iRect itemRect,
1436 const iListWidget *list) { 1440 const iListWidget *list) {
1437 const iSidebarWidget *sidebar = findParentClass_Widget(constAs_Widget(list), 1441 const iSidebarWidget *sidebar = findParentClass_Widget(constAs_Widget(list),
1438 &Class_SidebarWidget); 1442 &Class_SidebarWidget);
1443 const iBool isMenuVisible = isVisible_Widget(sidebar->menu);
1439 const iBool isPressing = isMouseDown_ListWidget(list); 1444 const iBool isPressing = isMouseDown_ListWidget(list);
1440 const iBool isHover = isHover_Widget(constAs_Widget(list)) && 1445 const iBool isHover =
1441 constHoverItem_ListWidget(list) == d; 1446 (!isMenuVisible &&
1447 isHover_Widget(constAs_Widget(list)) &&
1448 constHoverItem_ListWidget(list) == d) ||
1449 (isMenuVisible && sidebar->contextItem == d);
1442 const int scrollBarWidth = scrollBarWidth_ListWidget(list); 1450 const int scrollBarWidth = scrollBarWidth_ListWidget(list);
1443#if defined (iPlatformApple) 1451#if defined (iPlatformApple)
1444 const int blankWidth = 0; 1452 const int blankWidth = 0;
diff --git a/src/ui/util.c b/src/ui/util.c
index 04cdf27f..2d4bd628 100644
--- a/src/ui/util.c
+++ b/src/ui/util.c
@@ -2523,11 +2523,6 @@ iWidget *makeBookmarkEditor_Widget(void) {
2523 return dlg; 2523 return dlg;
2524} 2524}
2525 2525
2526static void enableSidebars_(void) {
2527 setFlags_Widget(findWidget_App("sidebar"), disabled_WidgetFlag, iFalse);
2528 setFlags_Widget(findWidget_App("sidebar2"), disabled_WidgetFlag, iFalse);
2529}
2530
2531static iBool handleBookmarkCreationCommands_SidebarWidget_(iWidget *editor, const char *cmd) { 2526static iBool handleBookmarkCreationCommands_SidebarWidget_(iWidget *editor, const char *cmd) {
2532 if (equal_Command(cmd, "bmed.accept") || equal_Command(cmd, "cancel")) { 2527 if (equal_Command(cmd, "bmed.accept") || equal_Command(cmd, "cancel")) {
2533 if (equal_Command(cmd, "bmed.accept")) { 2528 if (equal_Command(cmd, "bmed.accept")) {
@@ -2552,8 +2547,6 @@ static iBool handleBookmarkCreationCommands_SidebarWidget_(iWidget *editor, cons
2552 postCommand_App("bookmarks.changed"); 2547 postCommand_App("bookmarks.changed");
2553 } 2548 }
2554 destroy_Widget(editor); 2549 destroy_Widget(editor);
2555 /* Sidebars are disabled when a dialog is opened. */
2556 enableSidebars_();
2557 return iTrue; 2550 return iTrue;
2558 } 2551 }
2559 return iFalse; 2552 return iFalse;
@@ -2583,8 +2576,6 @@ iWidget *makeBookmarkCreation_Widget(const iString *url, const iString *title, i
2583static iBool handleFeedSettingCommands_(iWidget *dlg, const char *cmd) { 2576static iBool handleFeedSettingCommands_(iWidget *dlg, const char *cmd) {
2584 if (equal_Command(cmd, "cancel")) { 2577 if (equal_Command(cmd, "cancel")) {
2585 destroy_Widget(dlg); 2578 destroy_Widget(dlg);
2586 /* Sidebars are disabled when a dialog is opened. */
2587 enableSidebars_();
2588 return iTrue; 2579 return iTrue;
2589 } 2580 }
2590 if (equal_Command(cmd, "feedcfg.accept")) { 2581 if (equal_Command(cmd, "feedcfg.accept")) {
@@ -2619,8 +2610,6 @@ static iBool handleFeedSettingCommands_(iWidget *dlg, const char *cmd) {
2619 } 2610 }
2620 postCommand_App("bookmarks.changed"); 2611 postCommand_App("bookmarks.changed");
2621 destroy_Widget(dlg); 2612 destroy_Widget(dlg);
2622 /* Sidebars are disabled when a dialog is opened. */
2623 enableSidebars_();
2624 return iTrue; 2613 return iTrue;
2625 } 2614 }
2626 return iFalse; 2615 return iFalse;