mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-22 20:36:50 +03:00
gmc mcedit selection now works
This commit is contained in:
parent
9d3578f803
commit
99c03a1cda
@ -2435,12 +2435,10 @@ int edit_copy_to_X_buf_cmd (WEdit * edit)
|
||||
return 1;
|
||||
}
|
||||
#ifdef GTK
|
||||
#if 0
|
||||
gtk_set_selection_owner (CWindowOf (edit->widget));
|
||||
#else
|
||||
/* *** */
|
||||
printf ("gtk_set_selection_owner\n");
|
||||
#endif
|
||||
gtk_selection_owner_set (GTK_WIDGET (edit->widget), GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME);
|
||||
edit->widget->editable.selection_start_pos = start_mark;
|
||||
edit->widget->editable.selection_end_pos = end_mark;
|
||||
edit->widget->editable.has_selection = TRUE;
|
||||
#else
|
||||
XSetSelectionOwner (CDisplay, XA_PRIMARY, CWindowOf (edit->widget), CurrentTime);
|
||||
#endif
|
||||
@ -2455,16 +2453,15 @@ int edit_cut_to_X_buf_cmd (WEdit * edit)
|
||||
return 0;
|
||||
edit_XStore_block (edit, start_mark, end_mark);
|
||||
if (!edit_save_block_to_clip_file (edit, start_mark, end_mark)) {
|
||||
edit_error_dialog (_(" Cut to clipboard "), _(" Unable to save to file. "));
|
||||
edit_error_dialog (_ (" Cut to clipboard "), _ (" Unable to save to file. "));
|
||||
return 1;
|
||||
}
|
||||
edit_block_delete_cmd (edit);
|
||||
#ifdef GTK
|
||||
#if 0
|
||||
gtk_set_selection_owner (CWindowOf (edit->widget));
|
||||
#else
|
||||
printf ("gtk_set_selection_owner\n");
|
||||
#endif
|
||||
gtk_selection_owner_set (GTK_WIDGET (edit->widget), GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME);
|
||||
edit->widget->editable.selection_start_pos = start_mark;
|
||||
edit->widget->editable.selection_end_pos = end_mark;
|
||||
edit->widget->editable.has_selection = TRUE;
|
||||
#else
|
||||
XSetSelectionOwner (CDisplay, XA_PRIMARY, CWindowOf (edit->widget), CurrentTime);
|
||||
#endif
|
||||
@ -2487,11 +2484,8 @@ void edit_paste_from_X_buf_cmd (WEdit * edit)
|
||||
#endif
|
||||
else
|
||||
#ifdef GTK
|
||||
#if 0
|
||||
gtk_convert_selection ();
|
||||
#else
|
||||
/* *** */
|
||||
#endif
|
||||
gtk_selection_convert (GTK_WIDGET (edit->widget), GDK_SELECTION_PRIMARY,
|
||||
gdk_atom_intern ("COMPOUND_TEXT", FALSE), GDK_CURRENT_TIME);
|
||||
#else
|
||||
XConvertSelection (CDisplay, XA_PRIMARY, XA_STRING,
|
||||
XInternAtom (CDisplay, "VT_SELECTION", False),
|
||||
|
@ -137,7 +137,7 @@ static void move_mark (WEdit *edit)
|
||||
edit_mark_cmd (edit, 0);
|
||||
}
|
||||
|
||||
static void release_mark (WEdit *edit, XEvent *event)
|
||||
static void release_mark (WEdit * edit, XEvent * event)
|
||||
{
|
||||
if (edit->mark2 < 0)
|
||||
edit_mark_cmd (edit, 0);
|
||||
@ -146,13 +146,21 @@ static void release_mark (WEdit *edit, XEvent *event)
|
||||
if (edit->mark1 != edit->mark2 && event) {
|
||||
edit_get_selection (edit);
|
||||
#ifdef GTK
|
||||
{
|
||||
#if 0
|
||||
/* *** */
|
||||
gtk_set_selection_owner (CWindowOf (edit->widget));
|
||||
long start_mark = 0, end_mark = 0;
|
||||
edit->widget->editable.has_selection = !eval_marks (edit, &start_mark, &end_mark);
|
||||
edit->widget->editable.selection_start_pos = start_mark;
|
||||
edit->widget->editable.selection_end_pos = end_mark;
|
||||
if (edit->widget->editable.has_selection)
|
||||
#endif
|
||||
gtk_selection_owner_set (GTK_WIDGET (edit->widget), GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME);
|
||||
}
|
||||
#else
|
||||
XSetSelectionOwner (CDisplay, XA_PRIMARY, CWindowOf (edit->widget), event->xbutton.time);
|
||||
#endif
|
||||
} else {
|
||||
edit->widget->editable.has_selection = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@ -589,6 +597,7 @@ void selection_send (XSelectionRequestEvent * rq)
|
||||
|
||||
/*{{{ paste selection */
|
||||
|
||||
#ifndef GTK
|
||||
/*
|
||||
* Respond to a notification that a primary selection has been sent
|
||||
*/
|
||||
@ -606,20 +615,6 @@ void paste_prop (void *data, void (*insert) (void *, int), Window win, unsigned
|
||||
Atom actual_type;
|
||||
int actual_fmt, i;
|
||||
unsigned long nitems;
|
||||
|
||||
#ifdef GTK
|
||||
#if 0
|
||||
/* *** */
|
||||
if (gtk_get_window_property (win, prop,
|
||||
nread / 4, 65536, delete,
|
||||
AnyPropertyType, &actual_type, &actual_fmt,
|
||||
&nitems, &bytes_after,
|
||||
&s) != Success) {
|
||||
XFree (s);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
if (XGetWindowProperty (CDisplay, win, prop,
|
||||
nread / 4, 65536, delete,
|
||||
AnyPropertyType, &actual_type, &actual_fmt,
|
||||
@ -628,7 +623,6 @@ void paste_prop (void *data, void (*insert) (void *, int), Window win, unsigned
|
||||
XFree (s);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
nread += nitems;
|
||||
for (i = 0; i < nitems; i++)
|
||||
(*insert) (data, s[i]);
|
||||
@ -647,6 +641,8 @@ void selection_paste (WEdit * edit, Window win, unsigned prop, int delete)
|
||||
edit->force |= REDRAW_COMPLETELY | REDRAW_LINE;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*}}} */
|
||||
|
||||
void selection_clear (void)
|
||||
|
@ -1,4 +1,5 @@
|
||||
/* gtkedit.c - front end for gtk/gnome version
|
||||
/* gtkedit.c -
|
||||
front end for gtk/gnome version
|
||||
|
||||
Copyright (C) 1996, 1997 the Free Software Foundation
|
||||
|
||||
@ -533,6 +534,7 @@ static gint
|
||||
GtkEdit *edit;
|
||||
GtkEditable *editable;
|
||||
static GdkAtom ctext_atom = GDK_NONE;
|
||||
long start_mark = 0, end_mark = 0;
|
||||
|
||||
g_return_val_if_fail (widget != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_EDIT (widget), FALSE);
|
||||
@ -573,6 +575,14 @@ static gint
|
||||
xevent.xbutton.state = event->state;
|
||||
|
||||
edit_mouse_mark (edit->editor, &xevent, double_click);
|
||||
|
||||
editable->current_pos = edit->editor->curs1;
|
||||
editable->has_selection = !eval_marks (edit->editor, &start_mark, &end_mark);
|
||||
editable->selection_start_pos = start_mark;
|
||||
editable->selection_end_pos = end_mark;
|
||||
if (event->type == GDK_BUTTON_PRESS && event->button == 2)
|
||||
gtk_selection_convert (GTK_WIDGET (edit), GDK_SELECTION_PRIMARY,
|
||||
ctext_atom, event->time);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -691,6 +701,67 @@ static void get_home_dir (void)
|
||||
abort ();
|
||||
}
|
||||
|
||||
static gchar *gtk_edit_get_chars (GtkEditable * editable,
|
||||
gint start_pos,
|
||||
gint end_pos)
|
||||
{
|
||||
GtkEdit *edit;
|
||||
gchar *retval;
|
||||
int i;
|
||||
g_return_val_if_fail (editable != NULL, NULL);
|
||||
g_return_val_if_fail (GTK_IS_EDIT (editable), NULL);
|
||||
edit = GTK_EDIT (editable);
|
||||
if (end_pos < 0)
|
||||
end_pos = edit->editor->last_byte;
|
||||
if ((start_pos < 0) ||
|
||||
(end_pos > edit->editor->last_byte) ||
|
||||
(end_pos < start_pos))
|
||||
return 0;
|
||||
retval = malloc (end_pos - start_pos + 1);
|
||||
retval[end_pos - start_pos] = '\0';
|
||||
for (i = 0; start_pos < end_pos; start_pos++, i++)
|
||||
retval[i] = (gchar) edit_get_byte (edit->editor, start_pos);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void gtk_edit_set_selection (GtkEditable * editable,
|
||||
gint start,
|
||||
gint end)
|
||||
{
|
||||
GtkEdit *edit = GTK_EDIT (editable);
|
||||
guint start1, end1, start2, end2;
|
||||
if (end < 0)
|
||||
end = edit->editor->last_byte;
|
||||
start1 = MIN (start, end);
|
||||
end1 = MAX (start, end);
|
||||
start2 = MIN (editable->selection_start_pos, editable->selection_end_pos);
|
||||
end2 = MAX (editable->selection_start_pos, editable->selection_end_pos);
|
||||
if (start2 < start1) {
|
||||
guint tmp;
|
||||
tmp = start1;
|
||||
start1 = start2;
|
||||
start2 = tmp;
|
||||
tmp = end1;
|
||||
end1 = end2;
|
||||
end2 = tmp;
|
||||
}
|
||||
editable->selection_start_pos = start;
|
||||
editable->selection_end_pos = end;
|
||||
editable->has_selection = TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
static void gtk_edit_insert_text (GtkEditable * editable,
|
||||
const gchar * new_text,
|
||||
gint new_text_length,
|
||||
gint * position)
|
||||
{
|
||||
GtkEdit *edit = GTK_EDIT (editable);
|
||||
edit_cursor_move (edit->editor, *position - edit->editor->curs1);
|
||||
while (new_text_length--)
|
||||
edit_insert_ahead (edit->editor, new_text[new_text_length]);
|
||||
*position = edit->editor->curs1;
|
||||
}
|
||||
|
||||
static void gtk_edit_class_init (GtkEditClass * class)
|
||||
{
|
||||
@ -726,19 +797,19 @@ static void gtk_edit_class_init (GtkEditClass * class)
|
||||
widget_class->focus_in_event = 0;
|
||||
widget_class->focus_out_event = 0;
|
||||
|
||||
#if 0
|
||||
editable_class->insert_text = gtk_edit_insert_text;
|
||||
#if 0
|
||||
editable_class->delete_text = gtk_edit_delete_text;
|
||||
editable_class->update_text = gtk_edit_update_text;
|
||||
editable_class->get_chars = gtk_edit_get_chars;
|
||||
editable_class->set_selection = gtk_edit_set_selection;
|
||||
#endif
|
||||
editable_class->set_position = gtk_edit_set_position;
|
||||
|
||||
editable_class->insert_text = 0;
|
||||
#else
|
||||
editable_class->delete_text = 0;
|
||||
editable_class->update_text = 0;
|
||||
editable_class->get_chars = 0;
|
||||
#endif
|
||||
|
||||
editable_class->get_chars = gtk_edit_get_chars;
|
||||
editable_class->set_selection = gtk_edit_set_selection;
|
||||
editable_class->set_position = gtk_edit_set_position;
|
||||
|
||||
|
||||
#if 0
|
||||
editable_class->set_position = 0;
|
||||
|
@ -956,7 +956,7 @@ void edit_free_syntax_rules (WEdit * edit)
|
||||
syntax_free (edit->rules);
|
||||
}
|
||||
|
||||
#define CURRENT_SYNTAX_RULES_VERSION "43"
|
||||
#define CURRENT_SYNTAX_RULES_VERSION "44"
|
||||
|
||||
char *syntax_text[] = {
|
||||
"# syntax rules version " CURRENT_SYNTAX_RULES_VERSION,
|
||||
@ -1051,9 +1051,6 @@ char *syntax_text[] = {
|
||||
"###############################################################################",
|
||||
"file ..\\*\\\\.sh$ Shell\\sScript ^#!\\s\\*/.\\*/(ksh|bash|sh|pdkzsh)$",
|
||||
"",
|
||||
"wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
|
||||
"wholechars left abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
|
||||
"",
|
||||
"context default",
|
||||
" keyword whole for yellow/24",
|
||||
" keyword whole in yellow/24",
|
||||
@ -1170,6 +1167,9 @@ char *syntax_text[] = {
|
||||
"",
|
||||
" keyword wholeleft function*() brightblue/11",
|
||||
"",
|
||||
"wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
|
||||
"wholechars left abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
|
||||
"",
|
||||
" keyword whole arch cyan/14",
|
||||
" keyword whole ash cyan/14",
|
||||
" keyword whole awk cyan/14",
|
||||
@ -1259,6 +1259,9 @@ char *syntax_text[] = {
|
||||
" keyword whole zcat cyan/14",
|
||||
" keyword whole zsh cyan/14",
|
||||
"",
|
||||
"wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
|
||||
"wholechars left abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
|
||||
"",
|
||||
"context # \\n brown/22",
|
||||
"",
|
||||
"context exclusive whole <\\[\\s\\\\\\]EOF EOF green/6",
|
||||
@ -1452,6 +1455,9 @@ char *syntax_text[] = {
|
||||
"",
|
||||
" keyword $ brightgreen/16",
|
||||
"",
|
||||
"wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
|
||||
"wholechars left abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
|
||||
"",
|
||||
" keyword whole arch cyan/14",
|
||||
" keyword whole ash cyan/14",
|
||||
" keyword whole awk cyan/14",
|
||||
|
Loading…
Reference in New Issue
Block a user