diff --git a/src/add-ons/input_server/devices/keyboard/Jamfile b/src/add-ons/input_server/devices/keyboard/Jamfile index 4392dd5f3a..d6084abd45 100644 --- a/src/add-ons/input_server/devices/keyboard/Jamfile +++ b/src/add-ons/input_server/devices/keyboard/Jamfile @@ -2,8 +2,7 @@ SubDir HAIKU_TOP src add-ons input_server devices keyboard ; SetSubDirSupportedPlatformsBeOSCompatible ; -UsePrivateHeaders input ; -UsePrivateHeaders kernel ; +UsePrivateHeaders input kernel tracker ; UseArchHeaders $(TARGET_ARCH) ; Addon keyboard : input_server/devices : diff --git a/src/add-ons/input_server/devices/keyboard/TMWindow.cpp b/src/add-ons/input_server/devices/keyboard/TMWindow.cpp index 1fbb94207b..8596802ab8 100644 --- a/src/add-ons/input_server/devices/keyboard/TMWindow.cpp +++ b/src/add-ons/input_server/devices/keyboard/TMWindow.cpp @@ -18,7 +18,10 @@ #include "TMListItem.h" #include "KeyboardInputDevice.h" +#include "tracker_private.h" + #include +#include #include #include #include @@ -27,6 +30,7 @@ const uint32 TM_CANCEL = 'TMca'; const uint32 TM_FORCE_REBOOT = 'TMfr'; const uint32 TM_KILL_APPLICATION = 'TMka'; +const uint32 TM_RESTART_DESKTOP = 'TMrd'; const uint32 TM_SELECTED_TEAM = 'TMst'; #ifndef __HAIKU__ @@ -165,6 +169,14 @@ TMView::TMView(BRect bounds, const char* name, uint32 resizeFlags, new BMessage(TM_FORCE_REBOOT), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM); AddChild(forceReboot); + BRect restartRect = rect; + restartRect.left = rect.right + 20; + restartRect.right = restartRect.left + font.StringWidth("Restart the Desktop") + 20; + BButton *fRestartButton = new BButton(restartRect, "restart", "Restart the Desktop", + new BMessage(TM_RESTART_DESKTOP), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM); + AddChild(fRestartButton); + fRestartButton->Hide(); + rect.left += 4; rect.bottom = rect.top - 8; rect.top = fKillButton->Frame().bottom + 8; @@ -204,6 +216,14 @@ TMView::MessageReceived(BMessage *msg) UpdateList(); break; } + case TM_RESTART_DESKTOP: { + fRestartButton->SetEnabled(false); + if (!be_roster->IsRunning(kTrackerSignature)) + be_roster->Launch(kTrackerSignature); + if (!be_roster->IsRunning(kDeskbarSignature)) + be_roster->Launch(kDeskbarSignature); + break; + } case TM_SELECTED_TEAM: { fKillButton->SetEnabled(fListView->CurrentSelection() >= 0); TMListItem *item = (TMListItem*)ListView()->ItemAt( @@ -279,6 +299,13 @@ TMView::UpdateList() if (changed) fListView->Invalidate(); + + bool desktopRunning = be_roster->IsRunning(kTrackerSignature) + && be_roster->IsRunning(kDeskbarSignature); + if (desktopRunning ^ fRestartButton->IsHidden()) + fRestartButton->Show(); + if (!desktopRunning) + fRestartButton->SetEnabled(true); } diff --git a/src/add-ons/input_server/devices/keyboard/TMWindow.h b/src/add-ons/input_server/devices/keyboard/TMWindow.h index da26c8487c..4a864a8104 100644 --- a/src/add-ons/input_server/devices/keyboard/TMWindow.h +++ b/src/add-ons/input_server/devices/keyboard/TMWindow.h @@ -46,6 +46,7 @@ class TMView : public BBox { private: BListView *fListView; BButton *fKillButton; + BButton *fRestartButton; TMDescView *fDescView; };