Issue #30: Add onClick, accesskey, and tabindex tags to Image Map plug-in

This commit is contained in:
Alx Sa 2023-09-02 03:30:35 +00:00
parent b53f7c10e4
commit 531da1560d
9 changed files with 379 additions and 201 deletions

View file

@ -71,21 +71,21 @@ WS [ \t\n]+
return STRING;
}
IMG return IMG;
IMG return IMG;
SRC return SRC;
SRC return SRC;
WIDTH return WIDTH;
WIDTH return WIDTH;
HEIGHT return HEIGHT;
HEIGHT return HEIGHT;
BORDER return BORDER;
USEMAP return USEMAP;
MAP return START_MAP;
MAP return START_MAP;
\/MAP return END_MAP;
\/MAP return END_MAP;
NAME return NAME;
@ -105,7 +105,13 @@ ONFOCUS return ONFOCUS;
ONBLUR return ONBLUR;
ALT return ALT;
ONCLICK return ONCLICK;
ACCESSKEY return ACCESSKEY;
TABINDEX return TABINDEX;
ALT return ALT;
HREF return HREF;

View file

@ -54,8 +54,8 @@ static MapInfo_t *_map_info;
%token<val> IMG SRC WIDTH HEIGHT BORDER USEMAP
%token<val> START_MAP END_MAP NAME AREA SHAPE COORDS ALT HREF NOHREF
%token<val> TARGET ONMOUSEOVER ONMOUSEOUT ONFOCUS ONBLUR
%token<val> AUTHOR DESCRIPTION BEGIN_COMMENT END_COMMENT
%token<val> TARGET ONMOUSEOVER ONMOUSEOUT ONFOCUS ONBLUR ONCLICK
%token<val> ACCESSKEY TABINDEX AUTHOR DESCRIPTION BEGIN_COMMENT END_COMMENT
%token<value> FLOAT
%token<id> STRING
@ -176,6 +176,9 @@ tag : shape_tag
| onmouseout_tag
| onfocus_tag
| onblur_tag
| onclick_tag
| accesskey_tag
| tabindex_tag
;
shape_tag : SHAPE '=' STRING
@ -321,6 +324,27 @@ onblur_tag : ONBLUR '=' STRING
}
;
onclick_tag : ONCLICK '=' STRING
{
object_set_click(current_object, unescape_text($3));
g_free ($3);
}
;
accesskey_tag : ACCESSKEY '=' STRING
{
object_set_accesskey(current_object, unescape_text($3));
g_free ($3);
}
;
tabindex_tag : TABINDEX '=' STRING
{
object_set_tabindex(current_object, unescape_text($3));
g_free ($3);
}
;
end_map : '<' END_MAP '>'
;

View file

@ -382,8 +382,8 @@ static void yy_fatal_error (yyconst char msg[] );
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
#define YY_NUM_RULES 32
#define YY_END_OF_BUFFER 33
#define YY_NUM_RULES 35
#define YY_END_OF_BUFFER 36
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@ -1036,63 +1036,78 @@ return ONBLUR;
case 23:
YY_RULE_SETUP
#line 108 "imap_csim.l"
return ALT;
return ONCLICK;
YY_BREAK
case 24:
YY_RULE_SETUP
#line 110 "imap_csim.l"
return HREF;
return ACCESSKEY;
YY_BREAK
case 25:
YY_RULE_SETUP
#line 112 "imap_csim.l"
return NOHREF;
return TABINDEX;
YY_BREAK
case 26:
YY_RULE_SETUP
#line 114 "imap_csim.l"
return ALT;
YY_BREAK
case 27:
YY_RULE_SETUP
#line 116 "imap_csim.l"
return HREF;
YY_BREAK
case 28:
YY_RULE_SETUP
#line 118 "imap_csim.l"
return NOHREF;
YY_BREAK
case 29:
YY_RULE_SETUP
#line 120 "imap_csim.l"
{
BEGIN(quoted_string);
}
YY_BREAK
case 27:
case 30:
YY_RULE_SETUP
#line 118 "imap_csim.l"
#line 124 "imap_csim.l"
{
BEGIN(INITIAL);
return STRING;
}
YY_BREAK
case 28:
case 31:
/* rule 28 can match eol */
YY_RULE_SETUP
#line 123 "imap_csim.l"
#line 129 "imap_csim.l"
{
csim_lval.id = g_strndup (csim_text, csim_leng);
}
YY_BREAK
case 29:
case 32:
YY_RULE_SETUP
#line 127 "imap_csim.l"
#line 133 "imap_csim.l"
{
csim_lval.value = g_ascii_strtod (csim_text, NULL);
return FLOAT;
}
YY_BREAK
case 30:
/* rule 30 can match eol */
case 33:
/* rule 33 can match eol */
YY_RULE_SETUP
#line 132 "imap_csim.l"
#line 138 "imap_csim.l"
; /* Eat white space */
YY_BREAK
case 31:
case 34:
YY_RULE_SETUP
#line 134 "imap_csim.l"
#line 140 "imap_csim.l"
return *csim_text;
YY_BREAK
case 32:
case 35:
YY_RULE_SETUP
#line 136 "imap_csim.l"
#line 142 "imap_csim.l"
ECHO;
YY_BREAK
#line 1099 "<stdout>"

View file

@ -175,12 +175,15 @@ extern int csim_debug;
ONMOUSEOUT = 275,
ONFOCUS = 276,
ONBLUR = 277,
AUTHOR = 278,
DESCRIPTION = 279,
BEGIN_COMMENT = 280,
END_COMMENT = 281,
FLOAT = 282,
STRING = 283
ONCLICK = 278,
ACCESSKEY = 279,
TABINDEX = 280,
AUTHOR = 281,
DESCRIPTION = 282,
BEGIN_COMMENT = 283,
END_COMMENT = 284,
FLOAT = 285,
STRING = 286
};
#endif
/* Tokens. */
@ -204,12 +207,15 @@ extern int csim_debug;
#define ONMOUSEOUT 275
#define ONFOCUS 276
#define ONBLUR 277
#define AUTHOR 278
#define DESCRIPTION 279
#define BEGIN_COMMENT 280
#define END_COMMENT 281
#define FLOAT 282
#define STRING 283
#define ONCLICK 278
#define ACCESSKEY 279
#define TABINDEX 280
#define AUTHOR 281
#define DESCRIPTION 282
#define BEGIN_COMMENT 283
#define END_COMMENT 284
#define FLOAT 285
#define STRING 286
@ -580,15 +586,16 @@ static const char *const yytname[] =
"$end", "error", "$undefined", "IMG", "SRC", "WIDTH", "HEIGHT",
"BORDER", "USEMAP", "START_MAP", "END_MAP", "NAME", "AREA", "SHAPE",
"COORDS", "ALT", "HREF", "NOHREF", "TARGET", "ONMOUSEOVER", "ONMOUSEOUT",
"ONFOCUS", "ONBLUR", "AUTHOR", "DESCRIPTION", "BEGIN_COMMENT",
"END_COMMENT", "FLOAT", "STRING", "'<'", "'='", "'>'", "'/'", "$accept",
"csim_file", "image", "image_tags", "image_tag", "image_width",
"image_height", "integer_value", "start_map", "comment_lines",
"comment_line", "real_comment", "author_line", "description_line",
"ONFOCUS", "ONBLUR", "ONCLICK", "ACCESSKEY", "TABINDEX", "AUTHOR",
"DESCRIPTION", "BEGIN_COMMENT", "END_COMMENT", "FLOAT", "STRING",
"'<'", "'='", "'>'", "'/'", "$accept", "csim_file", "image", "image_tags",
"image_tag", "image_width", "image_height", "integer_value", "start_map",
"comment_lines", "comment_line", "real_comment", "author_line", "description_line",
"area_list", "area", "xhtml_close", "tag_list", "tag", "shape_tag",
"coords_tag", "href_tag", "nohref_tag", "optional_value", "alt_tag",
"target_tag", "onmouseover_tag", "onmouseout_tag", "onfocus_tag",
"onblur_tag", "end_map", YY_NULL
"onblur_tag", "onclick_tag", "accesskey_tag", "tabindex_tag", "end_map",
YY_NULL
};
#endif
@ -599,8 +606,8 @@ static const yytype_uint16 yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 278, 279, 280, 281, 282, 283, 60,
61, 62, 47
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
285, 286, 60, 61, 62, 47
};
# endif
@ -1824,6 +1831,30 @@ yyreduce:
g_free ((yyvsp[(3) - (3)].id));
}
break;
case 53:
/* Line 1787 of yacc.c */
#line 325 "imap_csim.y"
{
object_set_click(current_object, unescape_text((yyvsp[(3) - (3)].id)));
g_free ((yyvsp[(3) - (3)].id));
}
break;
case 54:
/* Line 1787 of yacc.c */
#line 332 "imap_csim.y"
{
object_set_accesskey(current_object, unescape_text((yyvsp[(3) - (3)].id)));
g_free ((yyvsp[(3) - (3)].id));
}
break;
case 55:
/* Line 1787 of yacc.c */
#line 339 "imap_csim.y"
{
object_set_tabindex(current_object, unescape_text((yyvsp[(3) - (3)].id)));
g_free ((yyvsp[(3) - (3)].id));
}
break;
/* Line 1787 of yacc.c */

View file

@ -66,12 +66,15 @@ extern int csim_debug;
ONMOUSEOUT = 275,
ONFOCUS = 276,
ONBLUR = 277,
AUTHOR = 278,
DESCRIPTION = 279,
BEGIN_COMMENT = 280,
END_COMMENT = 281,
FLOAT = 282,
STRING = 283
ONCLICK = 278,
ACCESSKEY = 279,
TABINDEX = 280,
AUTHOR = 281,
DESCRIPTION = 282,
BEGIN_COMMENT = 283,
END_COMMENT = 284,
FLOAT = 285,
STRING = 286
};
#endif
/* Tokens. */
@ -95,12 +98,15 @@ extern int csim_debug;
#define ONMOUSEOUT 275
#define ONFOCUS 276
#define ONBLUR 277
#define AUTHOR 278
#define DESCRIPTION 279
#define BEGIN_COMMENT 280
#define END_COMMENT 281
#define FLOAT 282
#define STRING 283
#define ONCLICK 278
#define ACCESSKEY 279
#define TABINDEX 280
#define AUTHOR 281
#define DESCRIPTION 282
#define BEGIN_COMMENT 283
#define END_COMMENT 284
#define FLOAT 285
#define STRING 286

View file

@ -201,12 +201,15 @@ append_page (GtkWidget *notebook, GtkWidget *page, const gchar *icon_name,
}
static void
create_link_tab(AreaInfoDialog_t *dialog, GtkWidget *notebook)
create_link_tab (AreaInfoDialog_t *dialog,
GtkWidget *notebook)
{
BrowseWidget_t *browse;
GtkWidget *grid, *label;
GtkWidget *subgrid, *frame;
GSList *group;
GtkWidget *grid;
GtkWidget *label;
GtkWidget *subgrid;
GtkWidget *frame;
GSList *group;
grid = gtk_grid_new ();
gtk_container_set_border_width (GTK_CONTAINER (grid), 12);
@ -228,7 +231,7 @@ create_link_tab(AreaInfoDialog_t *dialog, GtkWidget *notebook)
group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(dialog->web_site));
dialog->ftp_site = create_radio_button_in_grid (subgrid, group, 0, 1,
_("_Ftp Site"));
_("_FTP Site"));
g_signal_connect(dialog->ftp_site, "toggled",
G_CALLBACK (select_ftp_cb), (gpointer) dialog);
group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(dialog->ftp_site));
@ -293,6 +296,12 @@ create_link_tab(AreaInfoDialog_t *dialog, GtkWidget *notebook)
label = create_label_in_grid (grid, 9, 0, _("ALT te_xt: (optional)"));
dialog->comment = create_entry_in_grid (grid, label, 10, 0);
label = create_label_in_grid (grid, 12, 0, _("Access _Key: (optional)"));
dialog->accesskey = create_entry_in_grid (grid, label, 13, 0);
label = create_label_in_grid (grid, 15, 0, _("Ta_b Index: (optional)"));
dialog->tabindex = create_entry_in_grid (grid, label, 16, 0);
append_page (notebook, grid, GIMP_ICON_WEB, _("_Link"));
}
@ -344,7 +353,8 @@ create_info_tab(AreaInfoDialog_t *dialog, GtkWidget *notebook)
}
static void
create_java_script_tab(AreaInfoDialog_t *dialog, GtkWidget *notebook)
create_java_script_tab (AreaInfoDialog_t *dialog,
GtkWidget *notebook)
{
GtkWidget *vbox, *grid, *label;
@ -369,6 +379,9 @@ create_java_script_tab(AreaInfoDialog_t *dialog, GtkWidget *notebook)
label = create_label_in_grid (grid, 9, 0, "on_Blur (HTML 4.0):");
dialog->blur = create_entry_in_grid (grid, label, 10, 0);
label = create_label_in_grid (grid, 12, 0, "onC_lick:");
dialog->click = create_entry_in_grid (grid, label, 13, 0);
append_page (notebook, vbox, IMAP_JAVA, _("_JavaScript"));
}
@ -388,24 +401,30 @@ object_was_changed(AreaInfoDialog_t *dialog)
}
static void
edit_area_apply_cb(gpointer data)
edit_area_apply_cb (gpointer data)
{
AreaInfoDialog_t *param = (AreaInfoDialog_t*) data;
Object_t *obj = param->obj;
AreaInfoDialog_t *param = (AreaInfoDialog_t*) data;
Object_t *obj = param->obj;
object_set_url(obj, gtk_entry_get_text(GTK_ENTRY(param->url)));
object_set_target(obj, gtk_entry_get_text(GTK_ENTRY(param->target)));
object_set_comment(obj, gtk_entry_get_text(GTK_ENTRY(param->comment)));
object_set_mouse_over(obj,
gtk_entry_get_text(GTK_ENTRY(param->mouse_over)));
object_set_mouse_out(obj, gtk_entry_get_text(GTK_ENTRY(param->mouse_out)));
object_set_focus(obj, gtk_entry_get_text(GTK_ENTRY(param->focus)));
object_set_blur(obj, gtk_entry_get_text(GTK_ENTRY(param->blur)));
object_update(obj, param->infotab);
update_shape(obj);
object_set_url (obj, gtk_entry_get_text (GTK_ENTRY(param->url)));
object_set_target (obj, gtk_entry_get_text (GTK_ENTRY(param->target)));
object_set_comment (obj, gtk_entry_get_text (GTK_ENTRY(param->comment)));
object_set_accesskey (obj, gtk_entry_get_text (GTK_ENTRY(param->accesskey)));
object_set_tabindex (obj, gtk_entry_get_text (GTK_ENTRY(param->tabindex)));
if (object_was_changed(param))
preview_redraw();
object_set_mouse_over (obj,
gtk_entry_get_text (GTK_ENTRY (param->mouse_over)));
object_set_mouse_out (obj,
gtk_entry_get_text (GTK_ENTRY (param->mouse_out)));
object_set_focus (obj, gtk_entry_get_text (GTK_ENTRY (param->focus)));
object_set_blur (obj, gtk_entry_get_text (GTK_ENTRY (param->blur)));
object_set_click (obj, gtk_entry_get_text (GTK_ENTRY (param->click)));
object_update (obj, param->infotab);
update_shape (obj);
if (object_was_changed (param))
preview_redraw();
}
static void
@ -490,31 +509,35 @@ void
edit_area_info_dialog_show(AreaInfoDialog_t *dialog, Object_t *obj,
gboolean add)
{
gchar *title;
gchar *title;
object_unlock(dialog->obj);
object_lock(obj);
dialog->obj = obj;
dialog->clone = object_clone(obj);
dialog->add = add;
object_fill_info_tab(obj, dialog->infotab);
gtk_entry_set_text(GTK_ENTRY(dialog->url), obj->url);
gtk_entry_set_text(GTK_ENTRY(dialog->target), obj->target);
gtk_entry_set_text(GTK_ENTRY(dialog->comment), obj->comment);
gtk_entry_set_text(GTK_ENTRY(dialog->mouse_over), obj->mouse_over);
gtk_entry_set_text(GTK_ENTRY(dialog->mouse_out), obj->mouse_out);
gtk_entry_set_text(GTK_ENTRY(dialog->focus), obj->focus);
gtk_entry_set_text(GTK_ENTRY(dialog->blur), obj->blur);
gtk_widget_grab_focus(dialog->url);
object_unlock (dialog->obj);
object_lock(obj);
dialog->obj = obj;
dialog->clone = object_clone(obj);
dialog->add = add;
object_fill_info_tab (obj, dialog->infotab);
gtk_entry_set_text (GTK_ENTRY (dialog->url), obj->url);
gtk_entry_set_text (GTK_ENTRY (dialog->target), obj->target);
gtk_entry_set_text (GTK_ENTRY (dialog->comment), obj->comment);
gtk_entry_set_text (GTK_ENTRY (dialog->accesskey), obj->accesskey);
gtk_entry_set_text (GTK_ENTRY (dialog->tabindex), obj->tabindex);
dialog->geometry_cb_id =
object_list_add_geometry_cb(obj->list, geometry_changed, dialog);
gtk_entry_set_text (GTK_ENTRY (dialog->mouse_over), obj->mouse_over);
gtk_entry_set_text (GTK_ENTRY (dialog->mouse_out), obj->mouse_out);
gtk_entry_set_text (GTK_ENTRY (dialog->focus), obj->focus);
gtk_entry_set_text (GTK_ENTRY (dialog->blur), obj->blur);
gtk_entry_set_text (GTK_ENTRY (dialog->click), obj->click);
gtk_widget_grab_focus (dialog->url);
title = g_strdup_printf (_("Area #%d Settings"),
object_get_position_in_list(obj) + 1);
default_dialog_set_title(dialog->dialog, title);
g_free (title);
default_dialog_show(dialog->dialog);
dialog->geometry_cb_id =
object_list_add_geometry_cb (obj->list, geometry_changed, dialog);
title = g_strdup_printf (_("Area #%d Settings"),
object_get_position_in_list(obj) + 1);
default_dialog_set_title (dialog->dialog, title);
g_free (title);
default_dialog_show (dialog->dialog);
}
void

View file

@ -53,6 +53,9 @@ struct AreaInfoDialog_t {
GtkWidget *mouse_out;
GtkWidget *focus;
GtkWidget *blur;
GtkWidget *click;
GtkWidget *accesskey;
GtkWidget *tabindex;
GtkWidget *browse;
gpointer infotab;
gpointer geometry_cb_id;

View file

@ -163,33 +163,41 @@ object_list_remove_geometry_cb(ObjectList_t *list, gpointer id)
Object_t*
object_init(Object_t *obj, ObjectClass_t *class)
{
obj->class = class;
obj->refcount = 1;
obj->selected = FALSE;
obj->locked = FALSE;
obj->url = g_strdup("");
obj->target = g_strdup("");
obj->comment = g_strdup("");
obj->mouse_over = g_strdup("");
obj->mouse_out = g_strdup("");
obj->focus = g_strdup("");
obj->blur = g_strdup("");
return obj;
obj->class = class;
obj->refcount = 1;
obj->selected = FALSE;
obj->locked = FALSE;
obj->url = g_strdup ("");
obj->target = g_strdup ("");
obj->comment = g_strdup ("");
obj->accesskey = g_strdup ("");
obj->tabindex = g_strdup ("");
obj->mouse_over = g_strdup ("");
obj->mouse_out = g_strdup ("");
obj->focus = g_strdup ("");
obj->blur = g_strdup ("");
obj->click = g_strdup ("");
return obj;
}
static void
object_destruct(Object_t *obj)
{
if (obj->class->destruct)
obj->class->destruct(obj);
g_free(obj->url);
g_free(obj->target);
g_free(obj->comment);
g_free(obj->mouse_over);
g_free(obj->mouse_out);
g_free(obj->focus);
g_free(obj->blur);
g_free(obj);
if (obj->class->destruct)
obj->class->destruct(obj);
g_free (obj->url);
g_free (obj->target);
g_free (obj->comment);
g_free (obj->accesskey);
g_free (obj->tabindex);
g_free (obj->mouse_over);
g_free (obj->mouse_out);
g_free (obj->focus);
g_free (obj->blur);
g_free (obj->click);
g_free (obj);
}
Object_t*
@ -207,37 +215,47 @@ object_unref(Object_t *obj)
}
Object_t*
object_clone(Object_t *obj)
object_clone (Object_t *obj)
{
Object_t *clone = obj->class->clone(obj);
clone->class = obj->class;
clone->refcount = 1;
clone->selected = obj->selected;
clone->locked = FALSE;
clone->url = g_strdup(obj->url);
clone->target = g_strdup(obj->target);
clone->comment = g_strdup(obj->comment);
clone->mouse_over = g_strdup(obj->mouse_over);
clone->mouse_out = g_strdup(obj->mouse_out);
clone->focus = g_strdup(obj->focus);
clone->blur = g_strdup(obj->blur);
return clone;
Object_t *clone = obj->class->clone (obj);
clone->class = obj->class;
clone->refcount = 1;
clone->selected = obj->selected;
clone->locked = FALSE;
clone->url = g_strdup (obj->url);
clone->target = g_strdup (obj->target);
clone->comment = g_strdup (obj->comment);
clone->accesskey = g_strdup (obj->accesskey);
clone->tabindex = g_strdup (obj->tabindex);
clone->mouse_over = g_strdup (obj->mouse_over);
clone->mouse_out = g_strdup (obj->mouse_out);
clone->focus = g_strdup (obj->focus);
clone->blur = g_strdup (obj->blur);
clone->click = g_strdup (obj->click);
return clone;
}
static Object_t*
object_copy(Object_t *src, Object_t *des)
object_copy (Object_t *src, Object_t *des)
{
des->class = src->class;
des->selected = src->selected;
des->locked = FALSE;
g_strreplace(&des->url, src->url);
g_strreplace(&des->target, src->target);
g_strreplace(&des->comment, src->comment);
g_strreplace(&des->mouse_over, src->mouse_over);
g_strreplace(&des->mouse_out, src->mouse_out);
g_strreplace(&des->focus, src->focus);
g_strreplace(&des->blur, src->blur);
return des;
des->class = src->class;
des->selected = src->selected;
des->locked = FALSE;
g_strreplace (&des->url, src->url);
g_strreplace (&des->target, src->target);
g_strreplace (&des->comment, src->comment);
g_strreplace (&des->accesskey, src->accesskey);
g_strreplace (&des->tabindex, src->tabindex);
g_strreplace (&des->mouse_over, src->mouse_over);
g_strreplace (&des->mouse_out, src->mouse_out);
g_strreplace (&des->focus, src->focus);
g_strreplace (&des->blur, src->blur);
g_strreplace (&des->click, src->click);
return des;
}
Object_t*
@ -357,43 +375,65 @@ object_unlock(Object_t *obj)
void
object_set_url(Object_t *obj, const gchar *url)
{
g_strreplace(&obj->url, url);
g_strreplace (&obj->url, url);
}
void
object_set_target(Object_t *obj, const gchar *target)
{
g_strreplace(&obj->target, target);
g_strreplace (&obj->target, target);
}
void
object_set_comment(Object_t *obj, const gchar *comment)
{
g_strreplace(&obj->comment, comment);
g_strreplace (&obj->comment, comment);
}
void
object_set_accesskey (Object_t *obj,
const gchar *accesskey)
{
g_strreplace (&obj->accesskey, accesskey);
}
void
object_set_tabindex (Object_t *obj,
const gchar *tabindex)
{
g_strreplace (&obj->tabindex, tabindex);
}
void
object_set_mouse_over(Object_t *obj, const gchar *mouse_over)
{
g_strreplace(&obj->mouse_over, mouse_over);
g_strreplace (&obj->mouse_over, mouse_over);
}
void
object_set_mouse_out(Object_t *obj, const gchar *mouse_out)
{
g_strreplace(&obj->mouse_out, mouse_out);
g_strreplace (&obj->mouse_out, mouse_out);
}
void
object_set_focus(Object_t *obj, const gchar *focus)
{
g_strreplace(&obj->focus, focus);
g_strreplace (&obj->focus, focus);
}
void
object_set_blur(Object_t *obj, const gchar *blur)
object_set_blur (Object_t *obj,
const gchar *blur)
{
g_strreplace(&obj->blur, blur);
g_strreplace (&obj->blur, blur);
}
void
object_set_click (Object_t *obj,
const gchar *click)
{
g_strreplace (&obj->click, click);
}
gint
@ -994,24 +1034,31 @@ write_xml_attrib(const gchar *attrib, const gchar *value,
}
void
object_list_write_csim(ObjectList_t *list, gpointer param, OutputFunc_t output)
object_list_write_csim (ObjectList_t *list,
gpointer param,
OutputFunc_t output)
{
GList *p;
for (p = list->list; p; p = p->next) {
GList *p;
for (p = list->list; p; p = p->next)
{
Object_t *obj = (Object_t*) p->data;
output(param, "<area shape=");
obj->class->write_csim(obj, param, output);
output (param, "<area shape=");
obj->class->write_csim (obj, param, output);
write_xml_attrib("alt", obj->comment, "", param, output);
write_xml_attrib("target", obj->target, "", param, output);
write_xml_attrib("onmouseover", obj->mouse_over, "", param, output);
write_xml_attrib("onmouseout", obj->mouse_out, "", param, output);
write_xml_attrib("onfocus", obj->focus, "", param, output);
write_xml_attrib("onblur", obj->blur, "", param, output);
write_xml_attrib("href", obj->url, " nohref=\"nohref\"", param, output);
output(param," />\n");
}
write_xml_attrib ("alt", obj->comment, "", param, output);
write_xml_attrib ("target", obj->target, "", param, output);
write_xml_attrib ("accesskey", obj->accesskey, "", param, output);
write_xml_attrib ("tabindex", obj->tabindex, "", param, output);
write_xml_attrib ("onmouseover", obj->mouse_over, "", param, output);
write_xml_attrib ("onmouseout", obj->mouse_out, "", param, output);
write_xml_attrib ("onfocus", obj->focus, "", param, output);
write_xml_attrib ("onblur", obj->blur, "", param, output);
write_xml_attrib ("onclick", obj->click, "", param, output);
write_xml_attrib ("href", obj->url, " nohref=\"nohref\"", param, output);
output (param," />\n");
}
}
void

View file

@ -31,18 +31,21 @@ typedef struct ObjectList_t ObjectList_t;
#include "imap_menu_funcs.h"
struct Object_t {
ObjectClass_t *class;
ObjectList_t *list;
gint refcount;
gboolean selected;
gboolean locked;
gchar *url;
gchar *target;
gchar *comment;
gchar *mouse_over;
gchar *mouse_out;
gchar *focus;
gchar *blur;
ObjectClass_t *class;
ObjectList_t *list;
gint refcount;
gboolean selected;
gboolean locked;
gchar *url;
gchar *target;
gchar *accesskey;
gchar *tabindex;
gchar *comment;
gchar *mouse_over;
gchar *mouse_out;
gchar *focus;
gchar *blur;
gchar *click;
};
typedef void (*MoveSashFunc_t)(Object_t*, gint, gint);
@ -87,23 +90,43 @@ void object_unref(Object_t *obj);
Object_t* object_init(Object_t *obj, ObjectClass_t *class);
Object_t* object_clone(Object_t *obj);
Object_t* object_assign(Object_t *src, Object_t *des);
void object_draw(Object_t *obj, cairo_t *cr);
void object_edit(Object_t *obj, gboolean add);
void object_select(Object_t *obj);
void object_unselect(Object_t *obj);
void object_move(Object_t *obj, gint dx, gint dy);
void object_move_sash(Object_t *obj, gint dx, gint dy);
void object_remove(Object_t *obj);
void object_lock(Object_t *obj);
void object_unlock(Object_t *obj);
void object_set_url(Object_t *obj, const gchar *url);
void object_set_target(Object_t *obj, const gchar *target);
void object_set_comment(Object_t *obj, const gchar *comment);
void object_set_mouse_over(Object_t *obj, const gchar *mouse_over);
void object_set_mouse_out(Object_t *obj, const gchar *mouse_out);
void object_set_focus(Object_t *obj, const gchar *focus);
void object_set_blur(Object_t *obj, const gchar *blur);
gint object_get_position_in_list(Object_t *obj);
void object_draw (Object_t *obj,
cairo_t *cr);
void object_edit (Object_t *obj,
gboolean add);
void object_select (Object_t *obj);
void object_unselect (Object_t *obj);
void object_move (Object_t *obj,
gint dx,
gint dy);
void object_move_sash (Object_t *obj,
gint dx,
gint dy);
void object_remove (Object_t *obj);
void object_lock (Object_t *obj);
void object_unlock (Object_t *obj);
void object_set_url (Object_t *obj,
const gchar *url);
void object_set_target (Object_t *obj,
const gchar *target);
void object_set_comment (Object_t *obj,
const gchar *comment);
void object_set_accesskey (Object_t *obj,
const gchar *accesskey);
void object_set_tabindex (Object_t *obj,
const gchar *tabindex);
void object_set_mouse_over (Object_t *obj,
const gchar *mouse_over);
void object_set_mouse_out (Object_t *obj,
const gchar *mouse_out);
void object_set_focus (Object_t *obj,
const gchar *focus);
void object_set_blur (Object_t *obj,
const gchar *blur);
void object_set_click (Object_t *obj,
const gchar *click);
gint object_get_position_in_list (Object_t *obj);
void object_emit_changed_signal(Object_t *obj);
void object_emit_geometry_signal(Object_t *obj);