[haiku-commits] haiku: hrev47163 - src/kits/tracker headers/private/tracker src/apps/webpositive src

  • From: pulkomandy@xxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 24 Apr 2014 14:34:11 +0200 (CEST)

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())


Other related posts: