mirror of
https://github.com/yann64/haikuports.git
synced 2026-04-22 03:30:05 +02:00
LnLauncher: fix saving settings and add setting to not autostart
This commit is contained in:
@@ -12,10 +12,11 @@ The latest version, 1.1.2, was adapted for Haiku by Daniel Weber - thank you!"
|
||||
LICENSE="MIT"
|
||||
COPYRIGHT="2000-2015 Mikael Eiman"
|
||||
HOMEPAGE="http://eiman.tv/LnLauncher"
|
||||
REVISION="4"
|
||||
REVISION="5"
|
||||
ARCHITECTURES="x86_gcc2"
|
||||
|
||||
SOURCE_URI="git+https://bitbucket.org/m_eiman/lnlauncher/commits/c74acd4"
|
||||
PATCHES="lnlauncher-$portVersion.patchset"
|
||||
|
||||
PROVIDES="
|
||||
lnlauncher = $portVersion
|
||||
@@ -47,6 +48,8 @@ INSTALL()
|
||||
echo "target desktop {
|
||||
service x-vnd.LnLauncher {
|
||||
launch /system/apps/LnLauncher
|
||||
if setting ~/config/settings/LnLauncher/Settings autostart
|
||||
no_safemode
|
||||
legacy
|
||||
on {
|
||||
initial_volumes_mounted
|
||||
|
||||
488
haiku-apps/lnlauncher/patches/lnlauncher-1.1.2.patchset
Normal file
488
haiku-apps/lnlauncher/patches/lnlauncher-1.1.2.patchset
Normal file
@@ -0,0 +1,488 @@
|
||||
From 10966120873fd1e31cab628aebe4dfe8689c71e3 Mon Sep 17 00:00:00 2001
|
||||
From: Adrien Destugues <pulkomandy@pulkomandy.tk>
|
||||
Date: Tue, 10 Nov 2015 13:49:52 +0100
|
||||
Subject: Save settings when they change instead of at app exit.
|
||||
|
||||
* Saving settings at exit does not seem to work properly (we end up with
|
||||
an empty settings file).
|
||||
|
||||
diff --git a/source/PanelWindow.cpp b/source/PanelWindow.cpp
|
||||
index 3ec98c7..d8a22a8 100644
|
||||
--- a/source/PanelWindow.cpp
|
||||
+++ b/source/PanelWindow.cpp
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "PanelWindow.h"
|
||||
|
||||
+#include <Application.h>
|
||||
#include <Message.h>
|
||||
#include <stdio.h>
|
||||
#include <Screen.h>
|
||||
@@ -351,12 +352,14 @@ PanelWindow::MessageReceived( BMessage * msg )
|
||||
SetFeel(B_FLOATING_ALL_WINDOW_FEEL);
|
||||
else
|
||||
SetFeel(B_NORMAL_WINDOW_FEEL);
|
||||
+ be_app->PostMessage('Uset');
|
||||
} break;
|
||||
|
||||
case PANEL_SET_THIN_HANDLE:
|
||||
{
|
||||
msg->FindBool("thin_handle",&m_thin_handle);
|
||||
PositionViews();
|
||||
+ be_app->PostMessage('Uset');
|
||||
} break;
|
||||
|
||||
case PANEL_MOVE_ICON:
|
||||
@@ -406,6 +409,7 @@ PanelWindow::MessageReceived( BMessage * msg )
|
||||
m_icons.InsertAt( icon, new_pos );
|
||||
|
||||
PositionViews();
|
||||
+ be_app->PostMessage('Uset');
|
||||
} break;
|
||||
case PANEL_REMOVE_ICON:
|
||||
{
|
||||
@@ -422,6 +426,7 @@ PanelWindow::MessageReceived( BMessage * msg )
|
||||
m_size--;
|
||||
|
||||
PositionViews();
|
||||
+ be_app->PostMessage('Uset');
|
||||
|
||||
delete icon;
|
||||
}
|
||||
@@ -451,6 +456,7 @@ PanelWindow::MessageReceived( BMessage * msg )
|
||||
m_size = m_icons.NumItems();
|
||||
PositionViews();
|
||||
}
|
||||
+ be_app->PostMessage('Uset');
|
||||
} break;
|
||||
case PANEL_MOVE_TO:
|
||||
{
|
||||
@@ -504,6 +510,7 @@ PanelWindow::MessageReceived( BMessage * msg )
|
||||
PositionViews();
|
||||
|
||||
m_handle->Invalidate();
|
||||
+ be_app->PostMessage('Uset');
|
||||
}
|
||||
} break;
|
||||
case PANEL_TOGGLE_OPEN:
|
||||
@@ -534,6 +541,7 @@ PanelWindow::MessageReceived( BMessage * msg )
|
||||
{
|
||||
msg->FindBool("small_icons",&m_small_icons);
|
||||
PositionViews();
|
||||
+ be_app->PostMessage('Uset');
|
||||
for ( int32 c=0; ChildAt(c); c++ )
|
||||
ChildAt(c)->Invalidate();
|
||||
} break;
|
||||
@@ -544,6 +552,7 @@ PanelWindow::MessageReceived( BMessage * msg )
|
||||
{
|
||||
suspend_thread( m_pulse_thread );
|
||||
}
|
||||
+ be_app->PostMessage('Uset');
|
||||
} break;
|
||||
case PANEL_MOUSE_EXIT:
|
||||
{
|
||||
@@ -564,6 +573,7 @@ PanelWindow::MessageReceived( BMessage * msg )
|
||||
case PANEL_SET_EXPAND_ON_MOUSE_OVER:
|
||||
{
|
||||
msg->FindBool("expand_on_mouse_over",&m_expand_on_mouse_over);
|
||||
+ be_app->PostMessage('Uset');
|
||||
} break;
|
||||
default:
|
||||
BWindow::MessageReceived( msg );
|
||||
diff --git a/source/main.cpp b/source/main.cpp
|
||||
index 38622e3..34f6da5 100644
|
||||
--- a/source/main.cpp
|
||||
+++ b/source/main.cpp
|
||||
@@ -51,7 +51,7 @@ class MyApp : public BApplication
|
||||
return BApplication::Run();
|
||||
};
|
||||
|
||||
- virtual bool QuitRequested()
|
||||
+ void SaveSettings()
|
||||
{
|
||||
SettingsFile settings;
|
||||
BMessage panel;
|
||||
@@ -70,8 +70,6 @@ class MyApp : public BApplication
|
||||
}
|
||||
|
||||
settings.Save();
|
||||
-
|
||||
- return BApplication::QuitRequested();
|
||||
};
|
||||
|
||||
virtual void MessageReceived( BMessage * msg )
|
||||
@@ -97,6 +95,11 @@ class MyApp : public BApplication
|
||||
|
||||
panel->Lock();
|
||||
panel->Quit();
|
||||
+ SaveSettings();
|
||||
+ } break;
|
||||
+ case 'Uset':
|
||||
+ { // update settings
|
||||
+ SaveSettings();
|
||||
} break;
|
||||
default:
|
||||
return BApplication::MessageReceived( msg );
|
||||
--
|
||||
2.2.2
|
||||
|
||||
|
||||
From d8b46bf2128de83c2a0509fa5a7ffdae4be050bc Mon Sep 17 00:00:00 2001
|
||||
From: Adrien Destugues <pulkomandy@pulkomandy.tk>
|
||||
Date: Tue, 10 Nov 2015 14:08:30 +0100
|
||||
Subject: Remove rescue, add autostart
|
||||
|
||||
* remove "rescue" menu, as launch daemon takes care of that now
|
||||
* add "autostart" menu to allow LnLauncher to not autostart
|
||||
|
||||
diff --git a/source/HandleView.cpp b/source/HandleView.cpp
|
||||
index 3c46b49..cdef440 100644
|
||||
--- a/source/HandleView.cpp
|
||||
+++ b/source/HandleView.cpp
|
||||
@@ -45,9 +45,6 @@ static const char* kPanelRemove = B_TRANSLATE_MARK("Remove This");
|
||||
static const char* kReplicants = B_TRANSLATE_MARK("Replicants");
|
||||
static const char* kRepShow = B_TRANSLATE_MARK("Show");
|
||||
static const char* kRepHide = B_TRANSLATE_MARK("Hide");
|
||||
-static const char* kRescue = B_TRANSLATE_MARK("Rescue");
|
||||
-static const char* kRescueTracker = B_TRANSLATE_MARK("Tracker");
|
||||
-static const char* kRescueDeskbar = B_TRANSLATE_MARK("Deskbar");
|
||||
static const char* kStartTerminal = B_TRANSLATE_MARK("Terminal");
|
||||
static const char* kShutdown = B_TRANSLATE_MARK("Shutdown");
|
||||
static const char* kShutdownReboot = B_TRANSLATE_MARK("Reboot");
|
||||
@@ -68,7 +65,8 @@ HandleView::HandleView()
|
||||
B_WILL_DRAW|B_PULSE_NEEDED|B_FULL_UPDATE_ON_RESIZE
|
||||
),
|
||||
m_mouse_down( false ),
|
||||
- m_moving_panel( false )
|
||||
+ m_moving_panel( false ),
|
||||
+ fMenu(NULL)
|
||||
{
|
||||
SetViewColor( 255,203,0,0 );
|
||||
}
|
||||
@@ -76,13 +74,15 @@ HandleView::HandleView()
|
||||
HandleView::HandleView( BMessage * msg )
|
||||
: BView( msg ),
|
||||
m_mouse_down( false ),
|
||||
- m_moving_panel( false )
|
||||
+ m_moving_panel( false ),
|
||||
+ fMenu(NULL)
|
||||
{
|
||||
SetFlags( Flags() | B_FULL_UPDATE_ON_RESIZE );
|
||||
}
|
||||
|
||||
HandleView::~HandleView()
|
||||
{
|
||||
+ delete fMenu;
|
||||
}
|
||||
|
||||
BArchivable *
|
||||
@@ -340,10 +340,17 @@ HandleView::MessageReceived( BMessage * msg )
|
||||
} break;
|
||||
case 'Quit':
|
||||
{
|
||||
- printf("Quit requested\n");
|
||||
be_app->PostMessage( B_QUIT_REQUESTED );
|
||||
}
|
||||
break;
|
||||
+ case 'Auto':
|
||||
+ {
|
||||
+ fAutoStartMenu->SetMarked(!fAutoStartMenu->IsMarked());
|
||||
+ BMessage msg('Auto');
|
||||
+ msg.AddBool("autostart", fAutoStartMenu->IsMarked());
|
||||
+ be_app->PostMessage(&msg);
|
||||
+ }
|
||||
+ break;
|
||||
case 'PSTE':
|
||||
{ // color drop
|
||||
rgb_color * col;
|
||||
@@ -462,11 +469,12 @@ HandleView::ShowPopup( BPoint pos )
|
||||
{
|
||||
PanelWindow * panel = (PanelWindow*)Window();
|
||||
|
||||
- BPopUpMenu * menu = new BPopUpMenu(
|
||||
- "context",
|
||||
- false, // radio
|
||||
- false // label from marked
|
||||
- );
|
||||
+ if (fMenu == NULL) {
|
||||
+ fMenu = new BPopUpMenu(
|
||||
+ "context",
|
||||
+ false, // radio
|
||||
+ false // label from marked
|
||||
+ );
|
||||
|
||||
BMenu * sub_menu;
|
||||
|
||||
@@ -492,7 +500,7 @@ HandleView::ShowPopup( BPoint pos )
|
||||
sub_menu->FindItem(B_TRANSLATE(kSmallIco))->SetMarked(true);
|
||||
// set target
|
||||
sub_menu->SetTargetForItems( this );
|
||||
- menu->AddItem( sub_menu );
|
||||
+ fMenu->AddItem( sub_menu );
|
||||
|
||||
sub_menu = new BMenu( B_TRANSLATE(kThickness));
|
||||
// check if thick
|
||||
@@ -511,7 +519,7 @@ HandleView::ShowPopup( BPoint pos )
|
||||
sub_menu->FindItem(B_TRANSLATE(kThickThin))->SetMarked(true);
|
||||
// set target
|
||||
sub_menu->SetTargetForItems( this );
|
||||
- menu->AddItem( sub_menu );
|
||||
+ fMenu->AddItem( sub_menu );
|
||||
|
||||
sub_menu = new BMenu( B_TRANSLATE(kScrollspeed));
|
||||
sub_menu->AddItem( new BMenuItem(B_TRANSLATE(kSpeedSlow), new BMessage('SCsl')) );
|
||||
@@ -529,7 +537,7 @@ HandleView::ShowPopup( BPoint pos )
|
||||
sub_menu->FindItem(B_TRANSLATE(kSpeedInstant))->SetMarked(true);
|
||||
// set target
|
||||
sub_menu->SetTargetForItems( this );
|
||||
- menu->AddItem( sub_menu );
|
||||
+ fMenu->AddItem( sub_menu );
|
||||
|
||||
sub_menu = new BMenu( B_TRANSLATE(kExpOnMouseOver));
|
||||
sub_menu->AddItem( new BMenuItem(B_TRANSLATE(kOn), new BMessage('Semo')) );
|
||||
@@ -541,7 +549,7 @@ HandleView::ShowPopup( BPoint pos )
|
||||
sub_menu->FindItem(B_TRANSLATE(kOff))->SetMarked(true);
|
||||
// set target
|
||||
sub_menu->SetTargetForItems( this );
|
||||
- menu->AddItem( sub_menu );
|
||||
+ fMenu->AddItem( sub_menu );
|
||||
|
||||
sub_menu = new BMenu( B_TRANSLATE(kFloating));
|
||||
sub_menu->AddItem( new BMenuItem(B_TRANSLATE(kOn), new BMessage('Sfly')) );
|
||||
@@ -553,7 +561,7 @@ HandleView::ShowPopup( BPoint pos )
|
||||
sub_menu->FindItem(B_TRANSLATE(kOff))->SetMarked(true);
|
||||
// set target
|
||||
sub_menu->SetTargetForItems( this );
|
||||
- menu->AddItem( sub_menu );
|
||||
+ fMenu->AddItem( sub_menu );
|
||||
|
||||
|
||||
sub_menu = new BMenu( B_TRANSLATE(kPanel));
|
||||
@@ -561,9 +569,9 @@ HandleView::ShowPopup( BPoint pos )
|
||||
sub_menu->AddItem( new BMenuItem(B_TRANSLATE(kPanelRemove), new BMessage('Rpan')) );
|
||||
// set target
|
||||
sub_menu->SetTargetForItems( this );
|
||||
- menu->AddItem( sub_menu );
|
||||
+ fMenu->AddItem( sub_menu );
|
||||
|
||||
- menu->AddSeparatorItem();
|
||||
+ fMenu->AddSeparatorItem();
|
||||
|
||||
sub_menu = new BMenu( B_TRANSLATE(kReplicants));
|
||||
sub_menu->AddItem( new BMenuItem(B_TRANSLATE(kRepShow), new BMessage('REsh')) );
|
||||
@@ -575,34 +583,26 @@ HandleView::ShowPopup( BPoint pos )
|
||||
sub_menu->FindItem(B_TRANSLATE(kRepHide))->SetMarked(true);
|
||||
// set target
|
||||
sub_menu->SetTargetForItems( this );
|
||||
- menu->AddItem( sub_menu );
|
||||
-
|
||||
- sub_menu = new BMenu( B_TRANSLATE(kRescue));
|
||||
- sub_menu->AddItem( new BMenuItem(B_TRANSLATE(kRescueTracker), new BMessage('reTR')) );
|
||||
- sub_menu->AddItem( new BMenuItem(B_TRANSLATE(kRescueDeskbar), new BMessage('reDB')) );
|
||||
- sub_menu->AddItem( new BMenuItem(B_TRANSLATE(kStartTerminal), new BMessage('reTE')) );
|
||||
- // set target
|
||||
- sub_menu->SetTargetForItems( this );
|
||||
- menu->AddItem( sub_menu );
|
||||
+ fMenu->AddItem( sub_menu );
|
||||
|
||||
sub_menu = new BMenu( B_TRANSLATE(kShutdown));
|
||||
sub_menu->AddItem( new BMenuItem(B_TRANSLATE(kShutdownReboot), new BMessage(kMsgRebootSystem)) );
|
||||
sub_menu->AddItem( new BMenuItem(B_TRANSLATE(kShutdownPoweroff), new BMessage(kMsgShutdownSystem)) );
|
||||
// set target
|
||||
sub_menu->SetTargetForItems( this );
|
||||
- menu->AddItem( sub_menu );
|
||||
+ fMenu->AddItem( sub_menu );
|
||||
|
||||
- menu->AddSeparatorItem();
|
||||
+ fMenu->AddSeparatorItem();
|
||||
|
||||
- menu->AddItem( new BMenuItem(B_TRANSLATE(kQuit), new BMessage('Quit')) );
|
||||
+ fMenu->AddItem( fAutoStartMenu = new BMenuItem(B_TRANSLATE("Autostart"), new BMessage('Auto')) );
|
||||
+ fMenu->AddItem( new BMenuItem(B_TRANSLATE(kQuit), new BMessage('Quit')) );
|
||||
|
||||
- menu->SetTargetForItems( this );
|
||||
+ fMenu->SetTargetForItems( this );
|
||||
+ }
|
||||
|
||||
- menu->Go(
|
||||
+ fMenu->Go(
|
||||
pos,
|
||||
true, // delivers msg
|
||||
true // open anyway
|
||||
);
|
||||
-
|
||||
- delete menu;
|
||||
}
|
||||
diff --git a/source/HandleView.h b/source/HandleView.h
|
||||
index 86d84a6..02c3c9f 100644
|
||||
--- a/source/HandleView.h
|
||||
+++ b/source/HandleView.h
|
||||
@@ -3,6 +3,9 @@
|
||||
|
||||
#include <View.h>
|
||||
|
||||
+class BMenuItem;
|
||||
+class BPopUpMenu;
|
||||
+
|
||||
class HandleView : public BView
|
||||
{
|
||||
public:
|
||||
@@ -25,6 +28,9 @@ class HandleView : public BView
|
||||
bool m_mouse_down;
|
||||
bool m_moving_panel;
|
||||
int32 m_buttons;
|
||||
+
|
||||
+ BPopUpMenu* fMenu;
|
||||
+ BMenuItem* fAutoStartMenu;
|
||||
|
||||
void ShowPopup( BPoint );
|
||||
};
|
||||
diff --git a/source/IconView.cpp b/source/IconView.cpp
|
||||
index 3f88162..84342fc 100644
|
||||
--- a/source/IconView.cpp
|
||||
+++ b/source/IconView.cpp
|
||||
@@ -76,8 +76,6 @@ IconView::Instantiate( BMessage * archive )
|
||||
status_t
|
||||
IconView::Archive( BMessage * msg, bool deep ) const
|
||||
{
|
||||
- printf("Archiving path [%s] mime [%s]\n", m_path.Path(), m_app_sig.Type() );
|
||||
-
|
||||
msg->AddString("path", m_path.Path() );
|
||||
if ( m_app_sig.InitCheck() == B_OK )
|
||||
msg->AddString("app_sig", m_app_sig.Type() );
|
||||
@@ -136,14 +134,12 @@ IconView::Draw( BRect )
|
||||
|
||||
if (m_large_icon && bounds.Width() > 30)
|
||||
{
|
||||
-// printf("large icon\n");
|
||||
SetBlendingMode( B_PIXEL_ALPHA, B_ALPHA_OVERLAY );
|
||||
SetDrawingMode( B_OP_ALPHA );
|
||||
DrawBitmap( m_large_icon, BPoint(2,2) );
|
||||
} else
|
||||
if (m_small_icon)
|
||||
{
|
||||
-// printf("small icon\n");
|
||||
SetBlendingMode( B_PIXEL_ALPHA, B_ALPHA_OVERLAY );
|
||||
SetDrawingMode( B_OP_ALPHA );
|
||||
DrawBitmap( m_small_icon, BPoint(2,2) );
|
||||
@@ -358,15 +354,12 @@ IconView::MessageReceived( BMessage * msg )
|
||||
case GET_STRING_WINDOW_RESULT:
|
||||
{ // got string from args-window, Run!
|
||||
const char * arg_str = msg->FindString("string");
|
||||
- printf("arg_str [%s]\n", arg_str);
|
||||
Run( arg_str );
|
||||
} break;
|
||||
case BUBBLE_TEXT_REQUEST:
|
||||
{
|
||||
-// printf("Got bubble text request\n");
|
||||
BMessage reply( BUBBLE_TEXT_REPLY );
|
||||
reply.AddString("text", m_path.Leaf() );
|
||||
-// printf(" sending text [%s]\n", m_path.Leaf() );
|
||||
msg->SendReply( &reply );
|
||||
} break;
|
||||
default:
|
||||
@@ -404,14 +397,11 @@ IconView::Run( const char * args )
|
||||
|
||||
BMimeType mime_type( mime );
|
||||
|
||||
- printf("run [%s] [%s]\n", m_actual_path.Path(), mime_type.Type() );
|
||||
-
|
||||
BMessage msg( B_REFS_RECEIVED );
|
||||
msg.AddRef("refs",&ref);
|
||||
|
||||
if ( mime_type == "application/x-vnd.Be-directory" )
|
||||
{ // folder, open with preferred app
|
||||
- printf(B_TRANSLATE("open folder\n"));
|
||||
be_roster->Launch( mime_type.Type(), &msg );
|
||||
return;
|
||||
}
|
||||
@@ -451,18 +441,11 @@ IconView::Run( const char * args )
|
||||
num_arg++;
|
||||
}
|
||||
|
||||
- printf(B_TRANSLATE("Launching with args\n"));
|
||||
- printf(B_TRANSLATE(" argv ["));
|
||||
- for ( int c=0; c<num_arg; c++ )
|
||||
- printf("%s,",argv[c]);
|
||||
- printf("]\n");
|
||||
be_roster->Launch( &ref, num_arg, argv );
|
||||
|
||||
for ( int c=0; c<num_arg; c++ )
|
||||
delete [] argv[c];
|
||||
|
||||
- printf(B_TRANSLATE(" launched with args\n"));
|
||||
-
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -496,21 +479,6 @@ IconView::Update( bool get_icons )
|
||||
m_actual_path = m_path;
|
||||
}
|
||||
|
||||
- if ( m_path != m_actual_path )
|
||||
- {
|
||||
- printf("path [%s] actual [%s] app_sig [%s]\n",
|
||||
- m_path.Path(),
|
||||
- m_actual_path.Path(),
|
||||
- m_app_sig.Type()
|
||||
- );
|
||||
- } else
|
||||
- {
|
||||
- printf("path [%s] app_sig [%s]\n",
|
||||
- m_path.Path(),
|
||||
- m_app_sig.Type()
|
||||
- );
|
||||
- }
|
||||
-
|
||||
bool found_large = false, found_small = false;
|
||||
|
||||
if ( node.InitCheck() == B_OK )
|
||||
diff --git a/source/main.cpp b/source/main.cpp
|
||||
index 34f6da5..542fa07 100644
|
||||
--- a/source/main.cpp
|
||||
+++ b/source/main.cpp
|
||||
@@ -15,11 +15,13 @@ class MyApp : public BApplication
|
||||
{
|
||||
protected:
|
||||
List<PanelWindow> m_panels;
|
||||
+ bool fAutoStart;
|
||||
|
||||
public:
|
||||
MyApp()
|
||||
: BApplication("application/x-vnd.LnLauncher")
|
||||
{
|
||||
+ fAutoStart = true;
|
||||
};
|
||||
|
||||
virtual ~MyApp()
|
||||
@@ -33,6 +35,7 @@ class MyApp : public BApplication
|
||||
|
||||
settings.Load();
|
||||
|
||||
+ settings.FindBool("autostart", fAutoStart);
|
||||
for ( int32 c=0; settings.FindMessage("panel",c,&msg) == B_OK; c++ )
|
||||
{
|
||||
PanelWindow * panel = dynamic_cast<PanelWindow*>( PanelWindow::Instantiate(&msg) );
|
||||
@@ -57,6 +60,8 @@ class MyApp : public BApplication
|
||||
BMessage panel;
|
||||
|
||||
settings.MakeEmpty();
|
||||
+
|
||||
+ settings.AddBool("autostart", fAutoStart);
|
||||
|
||||
for ( int c=0; m_panels[c]; c++ )
|
||||
{
|
||||
@@ -101,6 +106,11 @@ class MyApp : public BApplication
|
||||
{ // update settings
|
||||
SaveSettings();
|
||||
} break;
|
||||
+ case 'Auto':
|
||||
+ {
|
||||
+ msg->FindBool("autostart", fAutoStart);
|
||||
+ SaveSettings();
|
||||
+ } break;
|
||||
default:
|
||||
return BApplication::MessageReceived( msg );
|
||||
|
||||
--
|
||||
2.2.2
|
||||
|
||||
Reference in New Issue
Block a user