SerialConnect: implement clipboard paste
Change-Id: Iaddb6588afa774bcffad9713f280a0078784605a Reviewed-on: https://review.haiku-os.org/c/haiku/+/6770 Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
committed by
Adrien Destugues
parent
4ae33413f2
commit
3a6bc1cf65
@@ -127,9 +127,12 @@ SerialWindow::SerialWindow()
|
|||||||
|
|
||||||
// Items for the edit menu
|
// Items for the edit menu
|
||||||
BMenuItem* clearScreen = new BMenuItem(B_TRANSLATE("Clear history"),
|
BMenuItem* clearScreen = new BMenuItem(B_TRANSLATE("Clear history"),
|
||||||
new BMessage(kMsgClear));
|
new BMessage(kMsgClear), 'L');
|
||||||
editMenu->AddItem(clearScreen);
|
editMenu->AddItem(clearScreen);
|
||||||
|
|
||||||
|
BMenuItem* paste = new BMenuItem(B_TRANSLATE("Paste"), new BMessage(B_PASTE), 'V');
|
||||||
|
editMenu->AddItem(paste);
|
||||||
|
|
||||||
// TODO copy (when we have selection), paste
|
// TODO copy (when we have selection), paste
|
||||||
|
|
||||||
// Configuring all this by menus may be a bit unhandy. Make a setting
|
// Configuring all this by menus may be a bit unhandy. Make a setting
|
||||||
@@ -468,6 +471,10 @@ void SerialWindow::MessageReceived(BMessage* message)
|
|||||||
fTermView->Clear();
|
fTermView->Clear();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
case B_PASTE:
|
||||||
|
{
|
||||||
|
fTermView->PasteFromClipboard();
|
||||||
|
}
|
||||||
case kMsgProgress:
|
case kMsgProgress:
|
||||||
{
|
{
|
||||||
// File transfer progress
|
// File transfer progress
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <Clipboard.h>
|
||||||
#include <Entry.h>
|
#include <Entry.h>
|
||||||
#include <File.h>
|
#include <File.h>
|
||||||
#include <Font.h>
|
#include <Font.h>
|
||||||
@@ -235,6 +236,21 @@ TermView::KeyDown(const char* bytes, int32 numBytes)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TermView::MouseDown(BPoint where)
|
||||||
|
{
|
||||||
|
int32 buttons = B_PRIMARY_MOUSE_BUTTON;
|
||||||
|
int32 clicks = 1;
|
||||||
|
if (Looper() != NULL && Looper()->CurrentMessage() != NULL) {
|
||||||
|
Looper()->CurrentMessage()->FindInt32("buttons", &buttons);
|
||||||
|
Looper()->CurrentMessage()->FindInt32("clicks", &clicks);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buttons == B_TERTIARY_MOUSE_BUTTON && clicks == 1)
|
||||||
|
PasteFromClipboard();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
TermView::MessageReceived(BMessage* message)
|
TermView::MessageReceived(BMessage* message)
|
||||||
{
|
{
|
||||||
@@ -284,6 +300,26 @@ TermView::Clear()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TermView::PasteFromClipboard()
|
||||||
|
{
|
||||||
|
if (!be_clipboard->Lock())
|
||||||
|
return;
|
||||||
|
|
||||||
|
BMessage* message = be_clipboard->Data();
|
||||||
|
|
||||||
|
const void *data;
|
||||||
|
ssize_t size;
|
||||||
|
if (message->FindData("text/plain", B_MIME_TYPE, &data, &size) == B_OK) {
|
||||||
|
BMessage* keyEvent = new BMessage(kMsgDataWrite);
|
||||||
|
keyEvent->AddData("data", B_RAW_TYPE, data, size);
|
||||||
|
be_app_messenger.SendMessage(keyEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
be_clipboard->Unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,13 @@ class TermView: public BView
|
|||||||
void FrameResized(float width, float height);
|
void FrameResized(float width, float height);
|
||||||
void GetPreferredSize(float* width, float* height);
|
void GetPreferredSize(float* width, float* height);
|
||||||
void KeyDown(const char* bytes, int32 numBytes);
|
void KeyDown(const char* bytes, int32 numBytes);
|
||||||
|
void MouseDown(BPoint where);
|
||||||
void MessageReceived(BMessage* message);
|
void MessageReceived(BMessage* message);
|
||||||
void SetLineTerminator(BString bytes);
|
void SetLineTerminator(BString bytes);
|
||||||
|
|
||||||
void PushBytes(const char* bytes, const size_t length);
|
void PushBytes(const char* bytes, const size_t length);
|
||||||
void Clear();
|
void Clear();
|
||||||
|
void PasteFromClipboard();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void _Init();
|
void _Init();
|
||||||
|
|||||||
Reference in New Issue
Block a user