[haiku-commits] r36661 - haiku/trunk/src/apps/installedpackages

  • From: superstippi@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 6 May 2010 18:03:30 +0200 (CEST)

Author: stippi
Date: 2010-05-06 18:03:30 +0200 (Thu, 06 May 2010)
New Revision: 36661
Changeset: http://dev.haiku-os.org/changeset/36661/haiku

Modified:
   haiku/trunk/src/apps/installedpackages/Jamfile
   haiku/trunk/src/apps/installedpackages/UninstallView.cpp
   haiku/trunk/src/apps/installedpackages/UninstallView.h
   haiku/trunk/src/apps/installedpackages/UninstallWindow.cpp
   haiku/trunk/src/apps/installedpackages/main.cpp
Log:
 * Applied patch by Jorma Karvonen which localizes the app. Thanks!
 * Fixed issues in the patch, global initializers are executed before the
   application constructor, and thus before loading the fAppCatalog! Please
   always at least test-run the application which you patch!
 * Removed BeOS support, as it no longer builds for BeOS anyway. (Even before
   this patch)
 * Fixed broken layout code (setting layout on BScrollView).
 * Simplyfied view hierarchy.
 * Coding style cleanups.


Modified: haiku/trunk/src/apps/installedpackages/Jamfile
===================================================================
--- haiku/trunk/src/apps/installedpackages/Jamfile      2010-05-06 15:55:56 UTC 
(rev 36660)
+++ haiku/trunk/src/apps/installedpackages/Jamfile      2010-05-06 16:03:30 UTC 
(rev 36661)
@@ -1,7 +1,5 @@
 SubDir HAIKU_TOP src apps installedpackages ;
 
-SetSubDirSupportedPlatformsBeOSCompatible ;
-
 UsePrivateHeaders shared interface ;
 SubDirHdrs $(HAIKU_TOP) src apps packageinstaller ;
 
@@ -13,5 +11,14 @@
        main.cpp
        UninstallWindow.cpp
        UninstallView.cpp
-       : be tracker $(TARGET_LIBSUPC++)
+       : be locale tracker translation z $(TARGET_LIBSUPC++)
 ;
+
+DoCatalogs InstalledPackages :
+       x-vnd.Haiku-InstalledPackages
+       :
+       main.cpp
+       UninstallView.cpp
+       UninstallWindow.cpp
+;
+

Modified: haiku/trunk/src/apps/installedpackages/UninstallView.cpp
===================================================================
--- haiku/trunk/src/apps/installedpackages/UninstallView.cpp    2010-05-06 
15:55:56 UTC (rev 36660)
+++ haiku/trunk/src/apps/installedpackages/UninstallView.cpp    2010-05-06 
16:03:30 UTC (rev 36661)
@@ -1,10 +1,12 @@
 /*
- * Copyright (c) 2007, Haiku, Inc.
+ * Copyright (c) 2007-2010, Haiku, Inc.
  * Distributed under the terms of the MIT license.
  *
  * Author:
  *             Łukasz 'Sil2100' Zemczak <sil2100@xxxxxxxxxxxxx>
  */
+
+
 #include "UninstallView.h"
 
 #include <stdio.h>
@@ -13,31 +15,35 @@
 #include <Alert.h>
 #include <Box.h>
 #include <Button.h>
+#include <Catalog.h>
+#include <ControlLook.h>
 #include <Directory.h>
 #include <Entry.h>
 #include <File.h>
 #include <FindDirectory.h>
+#include <GroupLayout.h>
+#include <GroupLayoutBuilder.h>
+#include <ListView.h>
+#include <Locale.h>
 #include <NodeMonitor.h>
+#include <ScrollView.h>
+#include <SeparatorView.h>
 #include <String.h>
 #include <StringView.h>
+#include <SpaceLayoutItem.h>
+#include <TextView.h>
 
-#ifdef __HAIKU__
-#      include <GroupLayout.h>
-#      include <GroupLayoutBuilder.h>
-#      include <SpaceLayoutItem.h>
-#endif
 
+#undef TR_CONTEXT
+#define TR_CONTEXT "UninstallView"
 
+
 enum {
        P_MSG_REMOVE = 'umrm',
        P_MSG_SELECT
 };
 
 
-// Reserved
-#define T(x) x
-
-
 // TODO list:
 //     - B_ENTRY_MOVED
 //     - Right now the installed package info naming convention is the same
@@ -45,37 +51,38 @@
 //     - Add a status window (reuse the one from PackageInstall)
 
 
-static const char* kNoPackageSelected = "No package selected.";
-
 class UninstallView::InfoItem : public BStringItem {
-       public:
-               InfoItem(const BString& name, const BString& version,
-                               const char* filename, const node_ref& ref)
-                       : BStringItem(name.String()),
-                         fName(name),
-                         fVersion(version),
-                         fNodeRef(ref)
-               {
-                       if (fName.Length() == 0)
-                               SetText(filename);
-               }
+public:
+       InfoItem(const BString& name, const BString& version,
+                       const char* filename, const node_ref& ref)
+               :
+               BStringItem(name.String()),
+               fName(name),
+               fVersion(version),
+               fNodeRef(ref)
+       {
+               if (fName.Length() == 0)
+                       SetText(filename);
+       }
 
-               const char* GetName() { return fName.String(); }
-               const char* GetVersion() { return fVersion.String(); };
-               node_ref GetNodeRef() { return fNodeRef; };
+       const char* GetName() { return fName.String(); }
+       const char* GetVersion() { return fVersion.String(); };
+       node_ref GetNodeRef() { return fNodeRef; };
 
-       private:
-               BString fName;
-               BString fVersion;
-               node_ref fNodeRef;
+private:
+       BString         fName;
+       BString         fVersion;
+       node_ref        fNodeRef;
 };
 
 
 
 
-UninstallView::UninstallView(BRect frame)
-       :       BView(frame, "uninstall_view", B_FOLLOW_NONE, 0)
+UninstallView::UninstallView()
+       :
+       BGroupView(B_VERTICAL)
 {
+       fNoPackageSelectedString = TR("No package selected.");
        _InitView();
 }
 
@@ -137,23 +144,23 @@
                                fprintf(stderr, "Created?...\n");
                                BString filename, name, version;
                                node_ref ref;
-                               if (msg->FindString("name", &filename) != B_OK 
||
-                                               msg->FindInt32("device", 
&ref.device) != B_OK ||
-                                               msg->FindInt64("node", 
&ref.node) != B_OK)
+                               if (msg->FindString("name", &filename) != B_OK
+                                       || msg->FindInt32("device", 
&ref.device) != B_OK
+                                       || msg->FindInt64("node", &ref.node) != 
B_OK)
                                        break;
 
                                // TODO: This obviously is a hack
-                               //  The node watcher informs the view a bit to 
early, and because
-                               //  of this the data of the node is not ready 
at this moment.
-                               //  For this reason, we must give the 
filesystem some time before
-                               //  continuing.
+                               // The node watcher informs the view a bit to 
early, and
+                               // because of this the data of the node is not 
ready at this
+                               // moment. For this reason, we must give the 
filesystem some
+                               // time before continuing.
                                usleep(10000);
 
                                if (fWatcherRunning) {
                                        _AddFile(filename.String(), ref);
                                } else {
-                                       // This most likely means we were 
waiting for the packages/ dir
-                                       // to appear
+                                       // This most likely means we were 
waiting for 
+                                       // the packages/ dir to appear
                                        if (filename == "packages") {
                                                if (watch_node(&ref, 
B_WATCH_DIRECTORY, this) == B_OK)
                                                        fWatcherRunning = true;
@@ -161,25 +168,25 @@
                                }
                        } else if (opcode == B_ENTRY_REMOVED) {
                                node_ref ref;
-                               if (msg->FindInt32("device", &ref.device) != 
B_OK ||
-                                               msg->FindInt64("node", 
&ref.node) != B_OK)
+                               if (msg->FindInt32("device", &ref.device) != 
B_OK
+                                       || msg->FindInt64("node", &ref.node) != 
B_OK)
                                        break;
 
                                int32 i, count = fAppList->CountItems();
-                               InfoItem *iter;
-                               for (i = 0;i < count;i++) {
+                               InfoItem* iter;
+                               for (i = 0; i < count; i++) {
                                        iter = static_cast<InfoItem 
*>(fAppList->ItemAt(i));
                                        if (iter->GetNodeRef() == ref) {
                                                if (i == 
fAppList->CurrentSelection())
-                                                       
fDescription->SetText(T(kNoPackageSelected));
+                                                       
fDescription->SetText(fNoPackageSelectedString);
                                                fAppList->RemoveItem(i);
                                                delete iter;
                                        }
                                }
                        } else if (opcode == B_ENTRY_MOVED) {
                                ino_t from, to;
-                               if (msg->FindInt64("from directory", &from) != 
B_OK ||
-                                               msg->FindInt64("to directory", 
&to) != B_OK)
+                               if (msg->FindInt64("from directory", &from) != 
B_OK
+                                       || msg->FindInt64("to directory", &to) 
!= B_OK)
                                        break;
 
                                BDirectory packagesDir(fToPackages.Path());
@@ -199,7 +206,7 @@
                case P_MSG_SELECT:
                {
                        fButton->SetEnabled(false);
-                       fDescription->SetText(T(kNoPackageSelected));
+                       fDescription->SetText(fNoPackageSelectedString);
 
                        int32 index = fAppList->CurrentSelection();
                        if (index < 0)
@@ -236,16 +243,16 @@
                                BListItem* item = fAppList->RemoveItem(index);
                                delete item;
 
-                               fDescription->SetText(T(kNoPackageSelected));
+                               fDescription->SetText(fNoPackageSelectedString);
 
                                notify = new BAlert("removal_success",
-                                       T("The package you selected has been 
successfully removed "
-                                       "from your system."), T("OK"));
+                                       TR("The package you selected has been 
successfully removed "
+                                       "from your system."), TR("OK"));
                        } else {
                                notify = new BAlert("removal_failed",
-                                       T("The selected package was not removed 
from your system. "
+                                       TR("The selected package was not 
removed from your system. "
                                        "The given installed package 
information file might have "
-                                       "been corrupted."), T("OK"), NULL, 
+                                       "been corrupted."), TR("OK"), NULL, 
                                        NULL, B_WIDTH_AS_USUAL, 
B_WARNING_ALERT);
                        }
 
@@ -263,40 +270,30 @@
 {
        SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
 
-#ifdef __HAIKU__
-       BBox* descriptionBox = new BBox(B_PLAIN_BORDER, NULL);
-       BGroupLayout* descriptionLayout = new BGroupLayout(B_VERTICAL, 5);
-       descriptionBox->SetLayout(descriptionLayout);
-
-       BBox* buttonBox = new BBox(B_PLAIN_BORDER, NULL);
-       BGroupLayout* buttonLayout = new BGroupLayout(B_HORIZONTAL, 5);
-       buttonBox->SetLayout(buttonLayout);
-
        fAppList = new BListView("pkg_list", B_SINGLE_SELECTION_LIST);
        fAppList->SetSelectionMessage(new BMessage(P_MSG_SELECT));
        BScrollView* scrollView = new BScrollView("list_scroll", fAppList,
-               B_FOLLOW_NONE, 0, false, true, B_NO_BORDER);
-       BGroupLayout* scrollLayout = new BGroupLayout(B_HORIZONTAL);
-       scrollView->SetLayout(scrollLayout);
+               0, false, true, B_NO_BORDER);
 
        BStringView* descriptionLabel = new BStringView("desc_label",
-               T("Package description"));
+               TR("Package description"));
        descriptionLabel->SetFont(be_bold_font);
 
        fDescription = new BTextView("description", B_WILL_DRAW);
        fDescription->MakeSelectable(false);
        fDescription->MakeEditable(false);
        fDescription->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
-       fDescription->SetText(T(kNoPackageSelected));
+       fDescription->SetText(fNoPackageSelectedString);
 
-       fButton = new BButton("removal", T("Remove"), new 
BMessage(P_MSG_REMOVE));
+       fButton = new BButton("removal", TR("Remove"), new 
BMessage(P_MSG_REMOVE));
        fButton->SetEnabled(false);
 
-       SetLayout(new BGroupLayout(B_HORIZONTAL));
+       const float spacing = be_control_look->DefaultItemSpacing();
 
-       AddChild(BGroupLayoutBuilder(B_VERTICAL, 0)
+       BGroupLayoutBuilder(GroupLayout())
                .Add(scrollView)
-               .Add(BGroupLayoutBuilder(descriptionLayout)
+               .Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
+               .Add(BGroupLayoutBuilder(B_VERTICAL)
                        .Add(BGroupLayoutBuilder(B_HORIZONTAL, 0)
                                .Add(descriptionLabel)
                                .AddGlue()
@@ -305,69 +302,15 @@
                                
.Add(BSpaceLayoutItem::CreateHorizontalStrut(10))
                                .Add(fDescription)
                        )
-                       .SetInsets(5, 5, 5, 5)
+                       .SetInsets(spacing, spacing, spacing, spacing)
                )
-               .Add(BGroupLayoutBuilder(buttonLayout)
+               .Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
+               .Add(BGroupLayoutBuilder(B_HORIZONTAL)
                        .AddGlue()
                        .Add(fButton)
-                       .SetInsets(5, 5, 5, 5)
+                       .SetInsets(spacing, spacing, spacing, spacing)
                )
-       );
-
-#else
-
-       BRect rect = Bounds().InsetBySelf(10.0f, 10.0f);
-       rect.bottom = 125.0f;
-       rect.right -= B_V_SCROLL_BAR_WIDTH;
-       fAppList = new BListView(rect, "pkg_list", B_SINGLE_SELECTION_LIST, 
-               B_FOLLOW_NONE);
-       fAppList->SetSelectionMessage(new BMessage(P_MSG_SELECT));
-
-       BScrollView *scroll = new BScrollView("list_scroll", fAppList,
-               B_FOLLOW_NONE, 0, false, true);
-       AddChild(scroll);
-
-       rect.top = rect.bottom + 8.0f;
-       rect.bottom += 120.0f;
-       rect.right += B_V_SCROLL_BAR_WIDTH;
-       BBox* box = new BBox(rect, "desc_box");
-
-       BStringView *descLabel = new BStringView(BRect(3, 3, 10, 10), 
"desc_label",
-               T("Package description:"));
-       descLabel->ResizeToPreferred();
-       box->AddChild(descLabel);
-
-       BRect inside = box->Bounds().InsetBySelf(3.0f, 3.0f);
-       inside.top = descLabel->Frame().bottom + 10.0f;
-       inside.right -= B_V_SCROLL_BAR_WIDTH;
-       fDescription = new BTextView(inside, "description", 
-               BRect(0, 0, inside.Width(), inside.Height()), B_FOLLOW_NONE,
-               B_WILL_DRAW);
-       fDescription->MakeSelectable(true);
-       fDescription->MakeEditable(false);
-       fDescription->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
-       fDescription->SetText(T(kNoPackageSelected));
-       
-       fDescScroll = new BScrollView("desc_scroll", fDescription, 
B_FOLLOW_NONE,
-               0, false, true, B_NO_BORDER);
-       box->AddChild(fDescScroll);
-
-       AddChild(box);
-
-       fButton = new BButton(BRect(0, 0, 1, 1), "removal", T("Remove"),
-               new BMessage(P_MSG_REMOVE));
-       fButton->ResizeToPreferred();
-       fButton->SetEnabled(false);
-
-       rect.top = rect.bottom + 5.0f;
-       rect.left = Bounds().Width() - 5.0f - fButton->Bounds().Width();
-
-       fButton->MoveTo(rect.LeftTop());
-       AddChild(fButton);
-
-       ResizeTo(Bounds().Width(), fButton->Frame().bottom + 10.0f);
-
-#endif
+       ;
 }
 
 
@@ -420,10 +363,8 @@
 {
        BString name;
        status_t ret = info_get_package_name(filename, name);
-       if (ret != B_OK || name.Length() == 0) {
-               fprintf(stderr, "Error extracting package name: %s\n",
-                       strerror(ret));
-       }
+       if (ret != B_OK || name.Length() == 0)
+               fprintf(stderr, "Error extracting package name: %s\n", 
strerror(ret));
        BString version;
        ret = info_get_package_version(filename, version);
        if (ret != B_OK || version.Length() == 0) {

Modified: haiku/trunk/src/apps/installedpackages/UninstallView.h
===================================================================
--- haiku/trunk/src/apps/installedpackages/UninstallView.h      2010-05-06 
15:55:56 UTC (rev 36660)
+++ haiku/trunk/src/apps/installedpackages/UninstallView.h      2010-05-06 
16:03:30 UTC (rev 36661)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, Haiku, Inc.
+ * Copyright (c) 2007-2010, Haiku, Inc.
  * Distributed under the terms of the MIT license.
  *
  * Author:
@@ -8,41 +8,47 @@
 #ifndef UNINSTALLVIEW_H
 #define UNINSTALLVIEW_H
 
-#include <View.h>
-#include <Layout.h>
-#include <ListView.h>
-#include <ScrollView.h>
-#include <Button.h>
-#include <TextView.h>
+#include <GroupView.h>
 #include <Path.h>
 
 #include "InstalledPackageInfo.h"
 
 
-class UninstallView : public BView {
+class BButton;
+class BListView;
+class BTextView;
+class BScrollView;
+
+
+class UninstallView : public BGroupView {
 public:
-                                                       UninstallView(BRect 
frame);
-       virtual                                 ~UninstallView();
+                                                               UninstallView();
+       virtual                                         ~UninstallView();
 
-       virtual void                    AttachedToWindow();
-       virtual void                    MessageReceived(BMessage* message);
-               
+       virtual void                            AttachedToWindow();
+       virtual void                            MessageReceived(BMessage* 
message);
+
 private:
-       class InfoItem;
+                       void                            _InitView();
+                       status_t                        _ReloadAppList();
+                       void                            _AddFile(const char* 
filename,
+                                                                       const 
node_ref& ref);
+                       void                            _ClearAppList();
+                       void                            _CachePathToPackages();
 
-                       void                    _InitView();
-                       status_t                _ReloadAppList();
-                       void                    _AddFile(const char* filename, 
const node_ref& ref);
-                       void                    _ClearAppList();
-                       void                    _CachePathToPackages();
+private:
+                       class InfoItem;
 
-                       BPath                   fToPackages;
-                       BListView*              fAppList;
-                       BTextView*              fDescription;
-                       BButton*                fButton;
-                       BScrollView*    fDescScroll;
+                       BPath                           fToPackages;
+                       BListView*                      fAppList;
+                       BTextView*                      fDescription;
+                       BButton*                        fButton;
+                       BScrollView*            fDescScroll;
                        InstalledPackageInfo fCurrentSelection;
-                       bool                    fWatcherRunning;
+                       bool                            fWatcherRunning;
+
+                       const char*                     
fNoPackageSelectedString;
 };
 
+
 #endif // UNINSTALLVIEW_H

Modified: haiku/trunk/src/apps/installedpackages/UninstallWindow.cpp
===================================================================
--- haiku/trunk/src/apps/installedpackages/UninstallWindow.cpp  2010-05-06 
15:55:56 UTC (rev 36660)
+++ haiku/trunk/src/apps/installedpackages/UninstallWindow.cpp  2010-05-06 
16:03:30 UTC (rev 36661)
@@ -1,29 +1,30 @@
 /*
- * Copyright (c) 2007, Haiku, Inc.
+ * Copyright (c) 2007-2010, Haiku, Inc.
  * Distributed under the terms of the MIT license.
  *
  * Author:
  *             Łukasz 'Sil2100' Zemczak <sil2100@xxxxxxxxxxxxx>
  */
+
+
 #include "UninstallWindow.h"
 
+#include <Catalog.h>
 #include <GroupLayout.h>
+#include <Locale.h>
 
 
-// Macro reserved for later localization
-#define T(x) x
+#undef TR_CONTEXT
+#define TR_CONTEXT "UninstallWindow"
 
 
 UninstallWindow::UninstallWindow()
-       : BWindow(BRect(100, 100, 600, 300), T("Installed packages"),
-               B_TITLED_WINDOW, B_NOT_ZOOMABLE
-               | B_QUIT_ON_WINDOW_CLOSE | B_AUTO_UPDATE_SIZE_LIMITS)
+       :
+       BWindow(BRect(100, 100, 600, 300), TR("Installed packages"),
+               B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_QUIT_ON_WINDOW_CLOSE
+                       | B_AUTO_UPDATE_SIZE_LIMITS)
 {
        SetLayout(new BGroupLayout(B_HORIZONTAL));
-
-       BView* view = new UninstallView(Bounds());
-       AddChild(view);
-
-       ResizeTo(Bounds().Width(), view->Bounds().Height());
+       AddChild(new UninstallView());
 }
 

Modified: haiku/trunk/src/apps/installedpackages/main.cpp
===================================================================
--- haiku/trunk/src/apps/installedpackages/main.cpp     2010-05-06 15:55:56 UTC 
(rev 36660)
+++ haiku/trunk/src/apps/installedpackages/main.cpp     2010-05-06 16:03:30 UTC 
(rev 36661)
@@ -1,37 +1,50 @@
 /*
- * Copyright (c) 2007, Haiku, Inc.
+ * Copyright (c) 2007-2010, Haiku, Inc.
  * Distributed under the terms of the MIT license.
  *
  * Author:
  *             Łukasz 'Sil2100' Zemczak <sil2100@xxxxxxxxxxxxx>
  */
+
+
 #include "UninstallWindow.h"
+
+#include <Alert.h>
 #include <Application.h>
+#include <Autolock.h>
+#include <Catalog.h>
+#include <Entry.h>
+#include <Locale.h>
 #include <List.h>
-#include <Alert.h>
 #include <TextView.h>
-#include <Entry.h>
-#include <Autolock.h>
+
 #include <stdio.h>
 
 
+#undef TR_CONTEXT
+#define TR_CONTEXT "UninstallApplication"
+
+
 class UninstallApplication : public BApplication {
-       public:
-               UninstallApplication();
-               ~UninstallApplication();
-               
-               void MessageReceived(BMessage *msg);
-               
-               void AboutRequested();
+public:
+       UninstallApplication();
+       ~UninstallApplication();
+       
+       void AboutRequested();
 
-       private:
-               UninstallWindow *fWindow;
+private:
+       UninstallWindow*        fWindow;
+       BCatalog                        fAppCatalog;
 };
 
 
 UninstallApplication::UninstallApplication()
-       :       BApplication("application/x-vnd.Haiku-InstalledPackages")
+       :
+       BApplication("application/x-vnd.Haiku-InstalledPackages"),
+       fWindow(NULL),
+       fAppCatalog(NULL)
 {
+       be_locale->GetAppCatalog(&fAppCatalog);
        fWindow = new UninstallWindow();
        fWindow->Show();
 }
@@ -43,43 +56,34 @@
 
 
 void
-UninstallApplication::MessageReceived(BMessage *msg)
-{
-       switch (msg->what) {
-               default:
-                       BApplication::MessageReceived(msg);
-       }
-}
-
-
-void
 UninstallApplication::AboutRequested()
 {
-       BAlert *about = new BAlert("about",
-                       "InstalledPackages\n"
-                       "BeOS legacy .pkg package removing application for 
Haiku.\n\n"
-                       "Copyright 2007,\nŁukasz 'Sil2100' Zemczak\n\n"
-                       "Copyright (c) 2007 Haiku, Inc. \n",
-                       "Close");
+       BString aboutString = TR("InstalledPackages");
+       int appNameLength = aboutString.Length();
+       aboutString << "\n";
+       aboutString << TR("BeOS legacy .pkg package removing application "
+               "for Haiku.\n\n"
+               "Copyright 2007,\nŁukasz 'Sil2100' Zemczak\n\n"
+               "Copyright (c) 2007 Haiku, Inc.\n");
+       BAlert* about = new BAlert("about", aboutString.String(), TR("Close"));
 
-       BTextView *view = about->TextView();
+       BTextView* view = about->TextView();
        BFont font;
        view->SetStylable(true);
        view->GetFont(&font);
        font.SetFace(B_BOLD_FACE);
        font.SetSize(font.Size() * 1.5);
-       view->SetFontAndColor(0, 15, &font);
+       view->SetFontAndColor(0, appNameLength, &font);
 
        about->Go();
 }
 
 
 int
-main(void)
+main()
 {
        UninstallApplication app;
        app.Run();
-       
        return 0;
 }
 


Other related posts:

  • » [haiku-commits] r36661 - haiku/trunk/src/apps/installedpackages - superstippi