viking_state.c (26442B)
1 /* This file has been automatically generated by geneet.py */ 2 /* DO NOT MODIFY */ 3 4 #include <limits.h> 5 #include <stdio.h> 6 #include <sys/stat.h> 7 #include <sys/types.h> 8 #include <unistd.h> 9 10 #include "viking_state.h" 11 12 struct _Config { 13 unsigned char allow_popup; 14 unsigned char enable_auto_load_images; 15 unsigned char enable_auto_shrink_images; 16 unsigned char enable_javascript; 17 unsigned char enable_touch_interface; 18 unsigned char enable_history; 19 const char * home_page; 20 const char * proxy; 21 unsigned char restore_state; 22 const char * user_agent; 23 unsigned char frame_flattening; 24 int text_zoom; 25 int minimum_font_size; 26 int cookie_policy; 27 const char *__eet_filename; 28 }; 29 30 struct _Hist_Item { 31 unsigned char enabled; 32 const char * title; 33 const char * url; 34 const char * proto; 35 unsigned int visit_count; 36 double last_visit; 37 }; 38 39 struct _Hist { 40 Eina_Hash * items; 41 const char *__eet_filename; 42 }; 43 44 struct _Session_Item { 45 const char * url; 46 unsigned char focused; 47 int scroll_x; 48 int scroll_y; 49 }; 50 51 struct _Session_Window { 52 Eina_List * tabs; 53 unsigned char focused; 54 }; 55 56 struct _Session { 57 Eina_List * windows; 58 const char *__eet_filename; 59 }; 60 61 static const char CONFIG_ENTRY[] = "config"; 62 static const char HIST_ITEM_ENTRY[] = "hist_item"; 63 static const char HIST_ENTRY[] = "hist"; 64 static const char SESSION_ITEM_ENTRY[] = "session_item"; 65 static const char SESSION_WINDOW_ENTRY[] = "session_window"; 66 static const char SESSION_ENTRY[] = "session"; 67 68 static Eet_Data_Descriptor *_config_descriptor = NULL; 69 static Eet_Data_Descriptor *_hist_item_descriptor = NULL; 70 static Eet_Data_Descriptor *_hist_descriptor = NULL; 71 static Eet_Data_Descriptor *_session_item_descriptor = NULL; 72 static Eet_Data_Descriptor *_session_window_descriptor = NULL; 73 static Eet_Data_Descriptor *_session_descriptor = NULL; 74 75 static inline void 76 _config_init(void) 77 { 78 Eet_Data_Descriptor_Class eddc; 79 80 if (_config_descriptor) return; 81 82 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Config); 83 _config_descriptor = eet_data_descriptor_stream_new(&eddc); 84 85 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "allow_popup", allow_popup, EET_T_UCHAR); 86 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "enable_auto_load_images", enable_auto_load_images, EET_T_UCHAR); 87 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "enable_auto_shrink_images", enable_auto_shrink_images, EET_T_UCHAR); 88 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "enable_javascript", enable_javascript, EET_T_UCHAR); 89 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "enable_touch_interface", enable_touch_interface, EET_T_UCHAR); 90 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "enable_history", enable_history, EET_T_UCHAR); 91 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "home_page", home_page, EET_T_STRING); 92 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "proxy", proxy, EET_T_STRING); 93 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "restore_state", restore_state, EET_T_UCHAR); 94 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "user_agent", user_agent, EET_T_STRING); 95 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "frame_flattening", frame_flattening, EET_T_UCHAR); 96 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "text_zoom", text_zoom, EET_T_INT); 97 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "minimum_font_size", minimum_font_size, EET_T_INT); 98 EET_DATA_DESCRIPTOR_ADD_BASIC(_config_descriptor, Config, "cookie_policy", cookie_policy, EET_T_INT); 99 } 100 101 static inline void 102 _config_shutdown(void) 103 { 104 if (!_config_descriptor) return; 105 eet_data_descriptor_free(_config_descriptor); 106 _config_descriptor = NULL; 107 } 108 109 Config * 110 config_new(unsigned char allow_popup, unsigned char enable_auto_load_images, unsigned char enable_auto_shrink_images, unsigned char enable_javascript, unsigned char enable_touch_interface, unsigned char enable_history, const char * home_page, const char * proxy, unsigned char restore_state, const char * user_agent, unsigned char frame_flattening, int text_zoom, int minimum_font_size, int cookie_policy) 111 { 112 Config *config = calloc(1, sizeof(Config)); 113 114 if (!config) 115 { 116 fprintf(stderr, "ERROR: could not calloc Config\n"); 117 return NULL; 118 } 119 120 config->allow_popup = allow_popup; 121 config->enable_auto_load_images = enable_auto_load_images; 122 config->enable_auto_shrink_images = enable_auto_shrink_images; 123 config->enable_javascript = enable_javascript; 124 config->enable_touch_interface = enable_touch_interface; 125 config->enable_history = enable_history; 126 config->home_page = eina_stringshare_add(home_page ? home_page : "http://www.getaddrinfo.net"); 127 config->proxy = eina_stringshare_add(proxy); 128 config->restore_state = restore_state; 129 config->user_agent = eina_stringshare_add(user_agent ? user_agent : "chrome"); 130 config->frame_flattening = frame_flattening; 131 config->text_zoom = text_zoom; 132 config->minimum_font_size = minimum_font_size; 133 config->cookie_policy = cookie_policy; 134 135 return config; 136 } 137 138 void 139 config_free(Config *config) 140 { 141 eina_stringshare_del(config->home_page); 142 eina_stringshare_del(config->proxy); 143 eina_stringshare_del(config->user_agent); 144 free(config); 145 } 146 147 inline unsigned char 148 config_allow_popup_get(const Config *config) 149 { 150 return config->allow_popup; 151 } 152 153 inline void 154 config_allow_popup_set(Config *config, unsigned char allow_popup) 155 { 156 EINA_SAFETY_ON_NULL_RETURN(config); 157 config->allow_popup = allow_popup; 158 } 159 160 inline unsigned char 161 config_enable_auto_load_images_get(const Config *config) 162 { 163 return config->enable_auto_load_images; 164 } 165 166 inline void 167 config_enable_auto_load_images_set(Config *config, unsigned char enable_auto_load_images) 168 { 169 EINA_SAFETY_ON_NULL_RETURN(config); 170 config->enable_auto_load_images = enable_auto_load_images; 171 } 172 173 inline unsigned char 174 config_enable_auto_shrink_images_get(const Config *config) 175 { 176 return config->enable_auto_shrink_images; 177 } 178 179 inline void 180 config_enable_auto_shrink_images_set(Config *config, unsigned char enable_auto_shrink_images) 181 { 182 EINA_SAFETY_ON_NULL_RETURN(config); 183 config->enable_auto_shrink_images = enable_auto_shrink_images; 184 } 185 186 inline unsigned char 187 config_enable_javascript_get(const Config *config) 188 { 189 return config->enable_javascript; 190 } 191 192 inline void 193 config_enable_javascript_set(Config *config, unsigned char enable_javascript) 194 { 195 EINA_SAFETY_ON_NULL_RETURN(config); 196 config->enable_javascript = enable_javascript; 197 } 198 199 inline unsigned char 200 config_enable_touch_interface_get(const Config *config) 201 { 202 return config->enable_touch_interface; 203 } 204 205 inline void 206 config_enable_touch_interface_set(Config *config, unsigned char enable_touch_interface) 207 { 208 EINA_SAFETY_ON_NULL_RETURN(config); 209 config->enable_touch_interface = enable_touch_interface; 210 } 211 212 inline unsigned char 213 config_enable_history_get(const Config *config) 214 { 215 return config->enable_history; 216 } 217 218 inline void 219 config_enable_history_set(Config *config, unsigned char enable_history) 220 { 221 EINA_SAFETY_ON_NULL_RETURN(config); 222 config->enable_history = enable_history; 223 } 224 225 inline const char * 226 config_home_page_get(const Config *config) 227 { 228 return config->home_page; 229 } 230 231 inline void 232 config_home_page_set(Config *config, const char *home_page) 233 { 234 EINA_SAFETY_ON_NULL_RETURN(config); 235 eina_stringshare_replace(&(config->home_page), home_page); 236 } 237 238 inline const char * 239 config_proxy_get(const Config *config) 240 { 241 return config->proxy; 242 } 243 244 inline void 245 config_proxy_set(Config *config, const char *proxy) 246 { 247 EINA_SAFETY_ON_NULL_RETURN(config); 248 eina_stringshare_replace(&(config->proxy), proxy); 249 } 250 251 inline unsigned char 252 config_restore_state_get(const Config *config) 253 { 254 return config->restore_state; 255 } 256 257 inline void 258 config_restore_state_set(Config *config, unsigned char restore_state) 259 { 260 EINA_SAFETY_ON_NULL_RETURN(config); 261 config->restore_state = restore_state; 262 } 263 264 inline const char * 265 config_user_agent_get(const Config *config) 266 { 267 return config->user_agent; 268 } 269 270 inline void 271 config_user_agent_set(Config *config, const char *user_agent) 272 { 273 EINA_SAFETY_ON_NULL_RETURN(config); 274 eina_stringshare_replace(&(config->user_agent), user_agent); 275 } 276 277 inline unsigned char 278 config_frame_flattening_get(const Config *config) 279 { 280 return config->frame_flattening; 281 } 282 283 inline void 284 config_frame_flattening_set(Config *config, unsigned char frame_flattening) 285 { 286 EINA_SAFETY_ON_NULL_RETURN(config); 287 config->frame_flattening = frame_flattening; 288 } 289 290 inline int 291 config_text_zoom_get(const Config *config) 292 { 293 return config->text_zoom; 294 } 295 296 inline void 297 config_text_zoom_set(Config *config, int text_zoom) 298 { 299 EINA_SAFETY_ON_NULL_RETURN(config); 300 config->text_zoom = text_zoom; 301 } 302 303 inline int 304 config_minimum_font_size_get(const Config *config) 305 { 306 return config->minimum_font_size; 307 } 308 309 inline void 310 config_minimum_font_size_set(Config *config, int minimum_font_size) 311 { 312 EINA_SAFETY_ON_NULL_RETURN(config); 313 config->minimum_font_size = minimum_font_size; 314 } 315 316 inline int 317 config_cookie_policy_get(const Config *config) 318 { 319 return config->cookie_policy; 320 } 321 322 inline void 323 config_cookie_policy_set(Config *config, int cookie_policy) 324 { 325 EINA_SAFETY_ON_NULL_RETURN(config); 326 config->cookie_policy = cookie_policy; 327 } 328 329 Config * 330 config_load(const char *filename) 331 { 332 Config *config = NULL; 333 Eet_File *ef = eet_open(filename, EET_FILE_MODE_READ); 334 if (!ef) 335 { 336 fprintf(stderr, "ERROR: could not open '%s' for read\n", filename); 337 return NULL; 338 } 339 340 config = eet_data_read(ef, _config_descriptor, CONFIG_ENTRY); 341 if (!config) goto end; 342 config->__eet_filename = eina_stringshare_add(filename); 343 344 end: 345 eet_close(ef); 346 return config; 347 } 348 349 Eina_Bool 350 config_save(Config *config, const char *filename) 351 { 352 Eet_File *ef; 353 Eina_Bool ret; 354 355 if (filename) eina_stringshare_replace(&(config->__eet_filename), filename); 356 else if (config->__eet_filename) filename = config->__eet_filename; 357 else return EINA_FALSE; 358 359 ef = eet_open(filename, EET_FILE_MODE_READ_WRITE); 360 if (!ef) 361 { 362 fprintf(stderr, "ERROR: could not open '%s' for write\n", filename); 363 return EINA_FALSE; 364 } 365 366 ret = !!eet_data_write(ef, _config_descriptor, CONFIG_ENTRY, config, EINA_TRUE); 367 eet_close(ef); 368 369 return ret; 370 } 371 372 static inline void 373 _hist_item_init(void) 374 { 375 Eet_Data_Descriptor_Class eddc; 376 377 if (_hist_item_descriptor) return; 378 379 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Hist_Item); 380 _hist_item_descriptor = eet_data_descriptor_stream_new(&eddc); 381 382 EET_DATA_DESCRIPTOR_ADD_BASIC(_hist_item_descriptor, Hist_Item, "enabled", enabled, EET_T_UCHAR); 383 EET_DATA_DESCRIPTOR_ADD_BASIC(_hist_item_descriptor, Hist_Item, "title", title, EET_T_STRING); 384 EET_DATA_DESCRIPTOR_ADD_BASIC(_hist_item_descriptor, Hist_Item, "url", url, EET_T_STRING); 385 EET_DATA_DESCRIPTOR_ADD_BASIC(_hist_item_descriptor, Hist_Item, "proto", proto, EET_T_STRING); 386 EET_DATA_DESCRIPTOR_ADD_BASIC(_hist_item_descriptor, Hist_Item, "visit_count", visit_count, EET_T_UINT); 387 EET_DATA_DESCRIPTOR_ADD_BASIC(_hist_item_descriptor, Hist_Item, "last_visit", last_visit, EET_T_DOUBLE); 388 } 389 390 static inline void 391 _hist_item_shutdown(void) 392 { 393 if (!_hist_item_descriptor) return; 394 eet_data_descriptor_free(_hist_item_descriptor); 395 _hist_item_descriptor = NULL; 396 } 397 398 Hist_Item * 399 hist_item_new(unsigned char enabled, const char * title, const char * url, const char * proto, unsigned int visit_count, double last_visit) 400 { 401 Hist_Item *hist_item = calloc(1, sizeof(Hist_Item)); 402 403 if (!hist_item) 404 { 405 fprintf(stderr, "ERROR: could not calloc Hist_Item\n"); 406 return NULL; 407 } 408 409 hist_item->enabled = enabled; 410 hist_item->title = eina_stringshare_add(title ? title : "Untitled"); 411 hist_item->url = eina_stringshare_add(url ? url : "about:blank"); 412 hist_item->proto = eina_stringshare_add(proto ? proto : "http"); 413 hist_item->visit_count = visit_count; 414 hist_item->last_visit = last_visit; 415 416 return hist_item; 417 } 418 419 void 420 hist_item_free(Hist_Item *hist_item) 421 { 422 eina_stringshare_del(hist_item->title); 423 eina_stringshare_del(hist_item->url); 424 eina_stringshare_del(hist_item->proto); 425 free(hist_item); 426 } 427 428 inline unsigned char 429 hist_item_enabled_get(const Hist_Item *hist_item) 430 { 431 return hist_item->enabled; 432 } 433 434 inline void 435 hist_item_enabled_set(Hist_Item *hist_item, unsigned char enabled) 436 { 437 EINA_SAFETY_ON_NULL_RETURN(hist_item); 438 hist_item->enabled = enabled; 439 } 440 441 inline const char * 442 hist_item_title_get(const Hist_Item *hist_item) 443 { 444 return hist_item->title; 445 } 446 447 inline void 448 hist_item_title_set(Hist_Item *hist_item, const char *title) 449 { 450 EINA_SAFETY_ON_NULL_RETURN(hist_item); 451 eina_stringshare_replace(&(hist_item->title), title); 452 } 453 454 inline const char * 455 hist_item_url_get(const Hist_Item *hist_item) 456 { 457 return hist_item->url; 458 } 459 460 inline void 461 hist_item_url_set(Hist_Item *hist_item, const char *url) 462 { 463 EINA_SAFETY_ON_NULL_RETURN(hist_item); 464 eina_stringshare_replace(&(hist_item->url), url); 465 } 466 467 inline const char * 468 hist_item_proto_get(const Hist_Item *hist_item) 469 { 470 return hist_item->proto; 471 } 472 473 inline void 474 hist_item_proto_set(Hist_Item *hist_item, const char *proto) 475 { 476 EINA_SAFETY_ON_NULL_RETURN(hist_item); 477 eina_stringshare_replace(&(hist_item->proto), proto); 478 } 479 480 inline unsigned int 481 hist_item_visit_count_get(const Hist_Item *hist_item) 482 { 483 return hist_item->visit_count; 484 } 485 486 inline void 487 hist_item_visit_count_set(Hist_Item *hist_item, unsigned int visit_count) 488 { 489 EINA_SAFETY_ON_NULL_RETURN(hist_item); 490 hist_item->visit_count = visit_count; 491 } 492 493 inline double 494 hist_item_last_visit_get(const Hist_Item *hist_item) 495 { 496 return hist_item->last_visit; 497 } 498 499 inline void 500 hist_item_last_visit_set(Hist_Item *hist_item, double last_visit) 501 { 502 EINA_SAFETY_ON_NULL_RETURN(hist_item); 503 hist_item->last_visit = last_visit; 504 } 505 506 507 static inline void 508 _hist_init(void) 509 { 510 Eet_Data_Descriptor_Class eddc; 511 512 if (_hist_descriptor) return; 513 514 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Hist); 515 _hist_descriptor = eet_data_descriptor_stream_new(&eddc); 516 517 EET_DATA_DESCRIPTOR_ADD_HASH(_hist_descriptor, Hist, "items", items, _hist_item_descriptor); 518 } 519 520 static inline void 521 _hist_shutdown(void) 522 { 523 if (!_hist_descriptor) return; 524 eet_data_descriptor_free(_hist_descriptor); 525 _hist_descriptor = NULL; 526 } 527 528 Hist * 529 hist_new(void) 530 { 531 Hist *hist = calloc(1, sizeof(Hist)); 532 533 if (!hist) 534 { 535 fprintf(stderr, "ERROR: could not calloc Hist\n"); 536 return NULL; 537 } 538 539 hist->items = eina_hash_stringshared_new(EINA_FREE_CB(hist_item_free)); 540 541 return hist; 542 } 543 544 void 545 hist_free(Hist *hist) 546 { 547 if (hist->items) eina_hash_free(hist->items); 548 free(hist); 549 } 550 551 void 552 hist_items_add(Hist *hist, const char * url, Hist_Item *hist_item) 553 { 554 EINA_SAFETY_ON_NULL_RETURN(hist); 555 eina_hash_add(hist->items, url, hist_item); 556 } 557 558 void 559 hist_items_del(Hist *hist, const char * url) 560 { 561 EINA_SAFETY_ON_NULL_RETURN(hist); 562 eina_hash_del(hist->items, url, NULL); 563 } 564 565 inline Hist_Item * 566 hist_items_get(const Hist *hist, const char * url) 567 { 568 EINA_SAFETY_ON_NULL_RETURN_VAL(hist, NULL); 569 return eina_hash_find(hist->items, url); 570 } 571 572 inline Eina_Hash * 573 hist_items_hash_get(const Hist *hist) 574 { 575 EINA_SAFETY_ON_NULL_RETURN_VAL(hist, NULL); 576 return hist->items; 577 } 578 579 void 580 hist_items_modify(Hist *hist, const char * key, void *value) 581 { 582 EINA_SAFETY_ON_NULL_RETURN(hist); 583 eina_hash_modify(hist->items, key, value); 584 } 585 586 Hist * 587 hist_load(const char *filename) 588 { 589 Hist *hist = NULL; 590 Eet_File *ef = eet_open(filename, EET_FILE_MODE_READ); 591 if (!ef) 592 { 593 fprintf(stderr, "ERROR: could not open '%s' for read\n", filename); 594 return NULL; 595 } 596 597 hist = eet_data_read(ef, _hist_descriptor, HIST_ENTRY); 598 if (!hist) goto end; 599 hist->__eet_filename = eina_stringshare_add(filename); 600 601 if (!hist->items) hist->items = eina_hash_stringshared_new(EINA_FREE_CB(hist_item_free)); 602 603 end: 604 eet_close(ef); 605 return hist; 606 } 607 608 Eina_Bool 609 hist_save(Hist *hist, const char *filename) 610 { 611 Eet_File *ef; 612 Eina_Bool ret; 613 614 if (filename) eina_stringshare_replace(&(hist->__eet_filename), filename); 615 else if (hist->__eet_filename) filename = hist->__eet_filename; 616 else return EINA_FALSE; 617 618 ef = eet_open(filename, EET_FILE_MODE_READ_WRITE); 619 if (!ef) 620 { 621 fprintf(stderr, "ERROR: could not open '%s' for write\n", filename); 622 return EINA_FALSE; 623 } 624 625 ret = !!eet_data_write(ef, _hist_descriptor, HIST_ENTRY, hist, EINA_TRUE); 626 eet_close(ef); 627 628 return ret; 629 } 630 631 static inline void 632 _session_item_init(void) 633 { 634 Eet_Data_Descriptor_Class eddc; 635 636 if (_session_item_descriptor) return; 637 638 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Session_Item); 639 _session_item_descriptor = eet_data_descriptor_stream_new(&eddc); 640 641 EET_DATA_DESCRIPTOR_ADD_BASIC(_session_item_descriptor, Session_Item, "url", url, EET_T_STRING); 642 EET_DATA_DESCRIPTOR_ADD_BASIC(_session_item_descriptor, Session_Item, "focused", focused, EET_T_UCHAR); 643 EET_DATA_DESCRIPTOR_ADD_BASIC(_session_item_descriptor, Session_Item, "scroll_x", scroll_x, EET_T_INT); 644 EET_DATA_DESCRIPTOR_ADD_BASIC(_session_item_descriptor, Session_Item, "scroll_y", scroll_y, EET_T_INT); 645 } 646 647 static inline void 648 _session_item_shutdown(void) 649 { 650 if (!_session_item_descriptor) return; 651 eet_data_descriptor_free(_session_item_descriptor); 652 _session_item_descriptor = NULL; 653 } 654 655 Session_Item * 656 session_item_new(const char * url, unsigned char focused, int scroll_x, int scroll_y) 657 { 658 Session_Item *session_item = calloc(1, sizeof(Session_Item)); 659 660 if (!session_item) 661 { 662 fprintf(stderr, "ERROR: could not calloc Session_Item\n"); 663 return NULL; 664 } 665 666 session_item->url = eina_stringshare_add(url); 667 session_item->focused = focused; 668 session_item->scroll_x = scroll_x; 669 session_item->scroll_y = scroll_y; 670 671 return session_item; 672 } 673 674 void 675 session_item_free(Session_Item *session_item) 676 { 677 eina_stringshare_del(session_item->url); 678 free(session_item); 679 } 680 681 inline const char * 682 session_item_url_get(const Session_Item *session_item) 683 { 684 return session_item->url; 685 } 686 687 inline void 688 session_item_url_set(Session_Item *session_item, const char *url) 689 { 690 EINA_SAFETY_ON_NULL_RETURN(session_item); 691 eina_stringshare_replace(&(session_item->url), url); 692 } 693 694 inline unsigned char 695 session_item_focused_get(const Session_Item *session_item) 696 { 697 return session_item->focused; 698 } 699 700 inline void 701 session_item_focused_set(Session_Item *session_item, unsigned char focused) 702 { 703 EINA_SAFETY_ON_NULL_RETURN(session_item); 704 session_item->focused = focused; 705 } 706 707 inline int 708 session_item_scroll_x_get(const Session_Item *session_item) 709 { 710 return session_item->scroll_x; 711 } 712 713 inline void 714 session_item_scroll_x_set(Session_Item *session_item, int scroll_x) 715 { 716 EINA_SAFETY_ON_NULL_RETURN(session_item); 717 session_item->scroll_x = scroll_x; 718 } 719 720 inline int 721 session_item_scroll_y_get(const Session_Item *session_item) 722 { 723 return session_item->scroll_y; 724 } 725 726 inline void 727 session_item_scroll_y_set(Session_Item *session_item, int scroll_y) 728 { 729 EINA_SAFETY_ON_NULL_RETURN(session_item); 730 session_item->scroll_y = scroll_y; 731 } 732 733 734 static inline void 735 _session_window_init(void) 736 { 737 Eet_Data_Descriptor_Class eddc; 738 739 if (_session_window_descriptor) return; 740 741 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Session_Window); 742 _session_window_descriptor = eet_data_descriptor_stream_new(&eddc); 743 744 EET_DATA_DESCRIPTOR_ADD_LIST(_session_window_descriptor, Session_Window, "tabs", tabs, _session_item_descriptor); 745 EET_DATA_DESCRIPTOR_ADD_BASIC(_session_window_descriptor, Session_Window, "focused", focused, EET_T_UCHAR); 746 } 747 748 static inline void 749 _session_window_shutdown(void) 750 { 751 if (!_session_window_descriptor) return; 752 eet_data_descriptor_free(_session_window_descriptor); 753 _session_window_descriptor = NULL; 754 } 755 756 Session_Window * 757 session_window_new(Eina_List * tabs, unsigned char focused) 758 { 759 Session_Window *session_window = calloc(1, sizeof(Session_Window)); 760 761 if (!session_window) 762 { 763 fprintf(stderr, "ERROR: could not calloc Session_Window\n"); 764 return NULL; 765 } 766 767 session_window->tabs = tabs; 768 session_window->focused = focused; 769 770 return session_window; 771 } 772 773 void 774 session_window_free(Session_Window *session_window) 775 { 776 if (session_window->tabs) 777 { 778 Session_Item *tabs_elem; 779 EINA_LIST_FREE(session_window->tabs, tabs_elem) 780 session_item_free(tabs_elem); 781 } 782 free(session_window); 783 } 784 785 inline void 786 session_window_tabs_add(Session_Window *session_window, Session_Item *session_item) 787 { 788 EINA_SAFETY_ON_NULL_RETURN(session_window); 789 session_window->tabs = eina_list_append(session_window->tabs, session_item); 790 } 791 792 inline void 793 session_window_tabs_del(Session_Window *session_window, Session_Item *session_item) 794 { 795 EINA_SAFETY_ON_NULL_RETURN(session_window); 796 session_window->tabs = eina_list_remove(session_window->tabs, session_item); 797 } 798 799 inline Session_Item * 800 session_window_tabs_get(const Session_Window *session_window, unsigned int nth) 801 { 802 EINA_SAFETY_ON_NULL_RETURN_VAL(session_window, NULL); 803 return eina_list_nth(session_window->tabs, nth); 804 } 805 806 inline unsigned int 807 session_window_tabs_count(const Session_Window *session_window) 808 { 809 EINA_SAFETY_ON_NULL_RETURN_VAL(session_window, 0); 810 return eina_list_count(session_window->tabs); 811 } 812 813 void 814 session_window_tabs_list_clear(Session_Window *session_window) 815 { 816 EINA_SAFETY_ON_NULL_RETURN(session_window); 817 Session_Item *data; 818 EINA_LIST_FREE(session_window->tabs, data) session_item_free(data); 819 } 820 821 inline Eina_List * 822 session_window_tabs_list_get(const Session_Window *session_window) 823 { 824 EINA_SAFETY_ON_NULL_RETURN_VAL(session_window, NULL); 825 return session_window->tabs; 826 } 827 828 inline void 829 session_window_tabs_list_set(Session_Window *session_window, Eina_List *list) 830 { 831 EINA_SAFETY_ON_NULL_RETURN(session_window); 832 session_window->tabs = list; 833 } 834 835 inline unsigned char 836 session_window_focused_get(const Session_Window *session_window) 837 { 838 return session_window->focused; 839 } 840 841 inline void 842 session_window_focused_set(Session_Window *session_window, unsigned char focused) 843 { 844 EINA_SAFETY_ON_NULL_RETURN(session_window); 845 session_window->focused = focused; 846 } 847 848 849 static inline void 850 _session_init(void) 851 { 852 Eet_Data_Descriptor_Class eddc; 853 854 if (_session_descriptor) return; 855 856 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Session); 857 _session_descriptor = eet_data_descriptor_stream_new(&eddc); 858 859 EET_DATA_DESCRIPTOR_ADD_LIST(_session_descriptor, Session, "windows", windows, _session_window_descriptor); 860 } 861 862 static inline void 863 _session_shutdown(void) 864 { 865 if (!_session_descriptor) return; 866 eet_data_descriptor_free(_session_descriptor); 867 _session_descriptor = NULL; 868 } 869 870 Session * 871 session_new(Eina_List * windows) 872 { 873 Session *session = calloc(1, sizeof(Session)); 874 875 if (!session) 876 { 877 fprintf(stderr, "ERROR: could not calloc Session\n"); 878 return NULL; 879 } 880 881 session->windows = windows; 882 883 return session; 884 } 885 886 void 887 session_free(Session *session) 888 { 889 if (session->windows) 890 { 891 Session_Window *windows_elem; 892 EINA_LIST_FREE(session->windows, windows_elem) 893 session_window_free(windows_elem); 894 } 895 free(session); 896 } 897 898 inline void 899 session_windows_add(Session *session, Session_Window *session_window) 900 { 901 EINA_SAFETY_ON_NULL_RETURN(session); 902 session->windows = eina_list_append(session->windows, session_window); 903 } 904 905 inline void 906 session_windows_del(Session *session, Session_Window *session_window) 907 { 908 EINA_SAFETY_ON_NULL_RETURN(session); 909 session->windows = eina_list_remove(session->windows, session_window); 910 } 911 912 inline Session_Window * 913 session_windows_get(const Session *session, unsigned int nth) 914 { 915 EINA_SAFETY_ON_NULL_RETURN_VAL(session, NULL); 916 return eina_list_nth(session->windows, nth); 917 } 918 919 inline unsigned int 920 session_windows_count(const Session *session) 921 { 922 EINA_SAFETY_ON_NULL_RETURN_VAL(session, 0); 923 return eina_list_count(session->windows); 924 } 925 926 void 927 session_windows_list_clear(Session *session) 928 { 929 EINA_SAFETY_ON_NULL_RETURN(session); 930 Session_Window *data; 931 EINA_LIST_FREE(session->windows, data) session_window_free(data); 932 } 933 934 inline Eina_List * 935 session_windows_list_get(const Session *session) 936 { 937 EINA_SAFETY_ON_NULL_RETURN_VAL(session, NULL); 938 return session->windows; 939 } 940 941 inline void 942 session_windows_list_set(Session *session, Eina_List *list) 943 { 944 EINA_SAFETY_ON_NULL_RETURN(session); 945 session->windows = list; 946 } 947 948 Session * 949 session_load(const char *filename) 950 { 951 Session *session = NULL; 952 Eet_File *ef = eet_open(filename, EET_FILE_MODE_READ); 953 if (!ef) 954 { 955 fprintf(stderr, "ERROR: could not open '%s' for read\n", filename); 956 return NULL; 957 } 958 959 session = eet_data_read(ef, _session_descriptor, SESSION_ENTRY); 960 if (!session) goto end; 961 session->__eet_filename = eina_stringshare_add(filename); 962 963 end: 964 eet_close(ef); 965 return session; 966 } 967 968 Eina_Bool 969 session_save(Session *session, const char *filename) 970 { 971 Eet_File *ef; 972 Eina_Bool ret; 973 974 if (filename) eina_stringshare_replace(&(session->__eet_filename), filename); 975 else if (session->__eet_filename) filename = session->__eet_filename; 976 else return EINA_FALSE; 977 978 ef = eet_open(filename, EET_FILE_MODE_READ_WRITE); 979 if (!ef) 980 { 981 fprintf(stderr, "ERROR: could not open '%s' for write\n", filename); 982 return EINA_FALSE; 983 } 984 985 ret = !!eet_data_write(ef, _session_descriptor, SESSION_ENTRY, session, EINA_TRUE); 986 eet_close(ef); 987 988 return ret; 989 } 990 991 void 992 viking_state_init(void) 993 { 994 _config_init(); 995 _hist_item_init(); 996 _hist_init(); 997 _session_item_init(); 998 _session_window_init(); 999 _session_init(); 1000 } 1001 1002 void 1003 viking_state_shutdown(void) 1004 { 1005 _config_shutdown(); 1006 _hist_item_shutdown(); 1007 _hist_shutdown(); 1008 _session_item_shutdown(); 1009 _session_window_shutdown(); 1010 _session_shutdown(); 1011 } 1012