hrev47163 adds 6 changesets to branch 'master' old head: e08beebef9784529c2c3324e77a390fad20b2c04 new head: c161ea9ac29499057df524e0a438ea92426ff76f overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=c161ea9+%5Ee08beeb ---------------------------------------------------------------------------- 4222656: Add a sniffing rule for XML. * Set to a weak priority, to let more specific rules be used (svg, xhtml, etc.) 1cb5adb: TabManager: better delay detection for closing the menu. As suggested by stippi, we can use system_time and the CurrentMessage when field to determine the relative time of the actual mouse clicks, rather than the time of message delivery. 9f97d1c: Remove useless include. 84da57f: MediaRoster: remove another message to app stdout. 5328693: Move IconMenuItem.h to headers/private/tracker. * This can be useful outside of Tracker, so make it more visible. c161ea9: WebPositive: add a bookmark bar. * This is a BMenuBar with IconMenuItems. * Uses node monitoring to live-update the bar as bookmarks are modified. * Bookmark folders are BNavMenus and can be browsed. * This needs some improvements, for example handling more bookmarks than the window width allows us to show (with an extra menu like for tabs?) Fixes #10232. [ Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> ] ---------------------------------------------------------------------------- 7 files changed, 149 insertions(+), 10 deletions(-) .../private}/tracker/IconMenuItem.h | 0 src/apps/webpositive/BrowserWindow.cpp | 141 +++++++++++++++++++ .../webpositive/tabview/TabContainerView.cpp | 1 - src/apps/webpositive/tabview/TabManager.cpp | 5 +- src/apps/webpositive/tabview/TabView.cpp | 1 - src/data/mime_db/text/xml | 4 + src/kits/media/MediaRoster.cpp | 7 +- ############################################################################ Commit: 422265608eacfd679b051e1df3377315976cd7b2 URL: http://cgit.haiku-os.org/haiku/commit/?id=4222656 Author: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> Date: Wed Apr 23 13:21:26 2014 UTC Add a sniffing rule for XML. * Set to a weak priority, to let more specific rules be used (svg, xhtml, etc.) ---------------------------------------------------------------------------- diff --git a/src/data/mime_db/text/xml b/src/data/mime_db/text/xml index 7a9e3db..6470cb3 100644 --- a/src/data/mime_db/text/xml +++ b/src/data/mime_db/text/xml @@ -3,6 +3,10 @@ resource(0, "BEOS:TYPE") #'MIMS' "application/x-vnd.Be-meta-mime"; resource(1, "META:TYPE") "text/xml"; +resource(2, "META:SNIFF_RULE") #'CSTR' array { + "0.2 (\"<?xml\")" +}; + resource(2, "META:S:DESC") #'MSDC' "XML file"; resource(3, "META:EXTENS") message(234) { ############################################################################ Commit: 1cb5adb6983c29bedce9c716877bae8cf8c1e921 URL: http://cgit.haiku-os.org/haiku/commit/?id=1cb5adb Author: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> Date: Wed Apr 23 13:29:08 2014 UTC TabManager: better delay detection for closing the menu. As suggested by stippi, we can use system_time and the CurrentMessage when field to determine the relative time of the actual mouse clicks, rather than the time of message delivery. ---------------------------------------------------------------------------- diff --git a/src/apps/webpositive/tabview/TabManager.cpp b/src/apps/webpositive/tabview/TabManager.cpp index a453613..7938335 100644 --- a/src/apps/webpositive/tabview/TabManager.cpp +++ b/src/apps/webpositive/tabview/TabManager.cpp @@ -181,8 +181,9 @@ public: // Don't reopen the menu if it's already open or freshly closed. bigtime_t clickSpeed = 2000000; get_click_speed(&clickSpeed); + bigtime_t clickTime = Window()->CurrentMessage()->FindInt64("when"); if (!IsEnabled() || (Value() == B_CONTROL_ON) - || real_time_clock_usecs() < fCloseTime + clickSpeed) { + || clickTime < fCloseTime + clickSpeed) { return; } @@ -199,7 +200,7 @@ public: void MenuClosed() { - fCloseTime = real_time_clock_usecs(); + fCloseTime = system_time(); SetValue(B_CONTROL_OFF); } ############################################################################ Commit: 9f97d1cca2a5e32433f5767ddefe80586a40e53e URL: http://cgit.haiku-os.org/haiku/commit/?id=9f97d1c Author: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> Date: Wed Apr 23 13:30:17 2014 UTC Remove useless include. ---------------------------------------------------------------------------- diff --git a/src/apps/webpositive/tabview/TabContainerView.cpp b/src/apps/webpositive/tabview/TabContainerView.cpp index 4491026..9ce130f 100644 --- a/src/apps/webpositive/tabview/TabContainerView.cpp +++ b/src/apps/webpositive/tabview/TabContainerView.cpp @@ -17,7 +17,6 @@ #include <Catalog.h> #include <ControlLook.h> #include <GroupView.h> -#include <MenuBar.h> #include <SpaceLayoutItem.h> #include <Window.h> diff --git a/src/apps/webpositive/tabview/TabView.cpp b/src/apps/webpositive/tabview/TabView.cpp index 3ccb929..af56ef5 100644 --- a/src/apps/webpositive/tabview/TabView.cpp +++ b/src/apps/webpositive/tabview/TabView.cpp @@ -15,7 +15,6 @@ #include <CardLayout.h> #include <ControlLook.h> #include <GroupView.h> -#include <MenuBar.h> #include <SpaceLayoutItem.h> #include <Window.h> ############################################################################ Commit: 84da57fd56b57a334ee640f570dd166b003b3d41 URL: http://cgit.haiku-os.org/haiku/commit/?id=84da57f Author: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> Date: Wed Apr 23 13:31:48 2014 UTC MediaRoster: remove another message to app stdout. ---------------------------------------------------------------------------- diff --git a/src/kits/media/MediaRoster.cpp b/src/kits/media/MediaRoster.cpp index 108fc07..b21b970 100644 --- a/src/kits/media/MediaRoster.cpp +++ b/src/kits/media/MediaRoster.cpp @@ -199,13 +199,8 @@ BMediaRosterEx::ReleaseNodeAll(const media_node& node) if (IS_INVALID_NODE(node)) return B_MEDIA_BAD_NODE; - if (node.kind & NODE_KIND_NO_REFCOUNTING) { - printf("BMediaRoster::ReleaseNodeAll, trying to release reference " - "counting disabled timesource, node %" B_PRId32 ", port %" B_PRId32 - ", team %" B_PRId32 "\n", - node.node, node.port, BPrivate::current_team()); + if (node.kind & NODE_KIND_NO_REFCOUNTING) return B_OK; - } server_release_node_request request; server_release_node_reply reply; ############################################################################ Commit: 53286932c0c8a756da6164f964aedb9b1e59bbe3 URL: http://cgit.haiku-os.org/haiku/commit/?id=5328693 Author: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> Date: Thu Apr 24 12:26:21 2014 UTC Move IconMenuItem.h to headers/private/tracker. * This can be useful outside of Tracker, so make it more visible. ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/IconMenuItem.h b/headers/private/tracker/IconMenuItem.h similarity index 100% rename from src/kits/tracker/IconMenuItem.h rename to headers/private/tracker/IconMenuItem.h ############################################################################ Revision: hrev47163 Commit: c161ea9ac29499057df524e0a438ea92426ff76f URL: http://cgit.haiku-os.org/haiku/commit/?id=c161ea9 Author: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> Date: Thu Apr 24 12:27:07 2014 UTC Ticket: https://dev.haiku-os.org/ticket/10232 WebPositive: add a bookmark bar. * This is a BMenuBar with IconMenuItems. * Uses node monitoring to live-update the bar as bookmarks are modified. * Bookmark folders are BNavMenus and can be browsed. * This needs some improvements, for example handling more bookmarks than the window width allows us to show (with an extra menu like for tabs?) Fixes #10232. ---------------------------------------------------------------------------- diff --git a/src/apps/webpositive/BrowserWindow.cpp b/src/apps/webpositive/BrowserWindow.cpp index 4ce93f9..0295c01 100644 --- a/src/apps/webpositive/BrowserWindow.cpp +++ b/src/apps/webpositive/BrowserWindow.cpp @@ -47,6 +47,7 @@ #include <GridLayoutBuilder.h> #include <GroupLayout.h> #include <GroupLayoutBuilder.h> +#include <IconMenuItem.h> #include <Keymap.h> #include <LayoutBuilder.h> #include <Locale.h> @@ -55,6 +56,7 @@ #include <MenuItem.h> #include <MessageRunner.h> #include <NodeInfo.h> +#include <NodeMonitor.h> #include <Path.h> #include <Roster.h> #include <Screen.h> @@ -66,6 +68,7 @@ #include <TextControl.h> #include <UnicodeChar.h> +#include <map> #include <stdio.h> #include "AuthenticationPanel.h" @@ -172,6 +175,142 @@ private: }; +class BookmarkBar: public BMenuBar { +public: + BookmarkBar(const char* title, BHandler* target, const entry_ref* navDir) + : BMenuBar(title) + { + BEntry(navDir).GetNodeRef(&fNodeRef); + } + + ~BookmarkBar() + { + stop_watching(BMessenger(this)); + } + + void AttachedToWindow() + { + BMenuBar::AttachedToWindow(); + watch_node(&fNodeRef, B_WATCH_DIRECTORY, BMessenger(this)); + + // Enumerate initial directory content + BDirectory dir(&fNodeRef); + BEntry bookmark; + while(dir.GetNextEntry(&bookmark) == B_OK) { + node_ref ref; + bookmark.GetNodeRef(&ref); + AddItem(ref.node, &bookmark); + } + } + + void MessageReceived(BMessage* message) + { + switch(message->what) { + case B_NODE_MONITOR: + int32 opcode = message->FindInt32("opcode"); + ino_t inode = message->FindInt64("node"); + switch(opcode) { + case B_ENTRY_CREATED: + { + entry_ref ref; + const char *name; + + message->FindInt32("device", &ref.device); + message->FindInt64("directory", &ref.directory); + message->FindString("name", &name); + ref.set_name(name); + + BEntry entry(&ref); + AddItem(inode, &entry); + break; + } + case B_ENTRY_MOVED: + { + if (fItemsMap[inode] == NULL) + { + entry_ref ref; + const char *name; + + message->FindInt32("device", &ref.device); + message->FindInt64("to directory", &ref.directory); + message->FindString("name", &name); + ref.set_name(name); + + BEntry entry(&ref); + AddItem(inode, &entry); + break; + } else { + // Existing item. Check if it's a rename or a move + // to some other folder. + ino_t from, to; + message->FindInt64("to directory", &to); + message->FindInt64("from directory", &from); + if (from == to) + { + const char *name; + message->FindString("name", &name); + fItemsMap[inode]->SetLabel(name); + break; + } + } + + // fall through: the item was moved from here to + // elsewhere, remove it from the bar. + } + case B_ENTRY_REMOVED: + { + IconMenuItem* item = fItemsMap[inode]; + RemoveItem(item); + fItemsMap.erase(inode); + delete item; + } + } + return; + } + + BMenuBar::MessageReceived(message); + } + +private: + void AddItem(ino_t inode, BEntry* entry) + { + char name[B_FILE_NAME_LENGTH]; + entry->GetName(name); + + // make sure the item doesn't already exists + if (fItemsMap[inode] != NULL) + return; + + entry_ref ref; + entry->GetRef(&ref); + + IconMenuItem* item = NULL; + + if(entry->IsDirectory()) { + BNavMenu* menu = new BNavMenu(name, B_REFS_RECEIVED, Window()); + menu->SetNavDir(&ref); + item = new IconMenuItem(menu, NULL, + "application/x-vnd.Be-directory", B_MINI_ICON); + + } else { + BNode node(entry); + BNodeInfo info(&node); + + BMessage* message = new BMessage(B_REFS_RECEIVED); + message->AddRef("refs", &ref); + item = new IconMenuItem(name, message, &info, + B_MINI_ICON); + } + + BMenuBar::AddItem(item); + fItemsMap[inode] = item; + } + + node_ref fNodeRef; + std::map<ino_t, IconMenuItem*> fItemsMap; +}; + + class PageUserData : public BWebView::UserData { public: PageUserData(BView* focusedView) @@ -581,6 +720,8 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings, #if !INTEGRATE_MENU_INTO_TAB_BAR .Add(menuBarGroup) #endif + .Add(new BookmarkBar(B_TRANSLATE("Bookmarks"), this, + &bookmarkRef)) .Add(fTabManager->TabGroup()) .Add(navigationGroup) .Add(fTabManager->ContainerView())