Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(181)

Side by Side Diff: chrome/browser/chromeos/input_method/ibus_engine_controller.cc

Issue 8393038: Share an instance of the ibus factory between all ibus engines. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/input_method/ibus_engine_controller.h" 5 #include "chrome/browser/chromeos/input_method/ibus_engine_controller.h"
6 6
7 #if defined(HAVE_IBUS) 7 #if defined(HAVE_IBUS)
8 #include <ibus.h> 8 #include <ibus.h>
9 #endif 9 #endif
10 10
(...skipping 602 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 reinterpret_cast<gpointer>(G_CALLBACK(IBusBusDisconnectedCallback)), 613 reinterpret_cast<gpointer>(G_CALLBACK(IBusBusDisconnectedCallback)),
614 this); 614 this);
615 } 615 }
616 616
617 // Handles "connected" signal from ibus-daemon. 617 // Handles "connected" signal from ibus-daemon.
618 static void IBusBusConnectedCallback(IBusBus* bus, gpointer user_data) { 618 static void IBusBusConnectedCallback(IBusBus* bus, gpointer user_data) {
619 LOG(WARNING) << "IBus connection is recovered."; 619 LOG(WARNING) << "IBus connection is recovered.";
620 g_return_if_fail(user_data); 620 g_return_if_fail(user_data);
621 IBusEngineControllerImpl* self 621 IBusEngineControllerImpl* self
622 = static_cast<IBusEngineControllerImpl*>(user_data); 622 = static_cast<IBusEngineControllerImpl*>(user_data);
623 if (!g_factory_) {
624 g_factory_ = ibus_factory_new(ibus_bus_get_connection(bus));
Peng 2011/10/26 17:53:21 I only find you create g_factory in connected sign
Zachary Kuznia 2011/10/27 07:25:11 Done.
625 }
626
623 if (!self->MaybeCreateComponent()) { 627 if (!self->MaybeCreateComponent()) {
624 LOG(ERROR) << "MaybeCreateComponent() failed"; 628 LOG(ERROR) << "MaybeCreateComponent() failed";
625 return; 629 return;
626 } 630 }
627 } 631 }
628 632
629 // Handles "disconnected" signal from ibus-daemon. 633 // Handles "disconnected" signal from ibus-daemon.
630 static void IBusBusDisconnectedCallback(IBusBus* bus, gpointer user_data) { 634 static void IBusBusDisconnectedCallback(IBusBus* bus, gpointer user_data) {
631 LOG(WARNING) << "IBus connection is terminated."; 635 LOG(WARNING) << "IBus connection is terminated.";
636 g_factory_ = NULL;
632 } 637 }
633 638
634 bool MaybeCreateComponent() { 639 bool MaybeCreateComponent() {
635 if (!ibus_ || !ibus_bus_is_connected(ibus_)) { 640 if (!ibus_ || !ibus_bus_is_connected(ibus_) || !g_factory_) {
636 return false; 641 return false;
637 } 642 }
638 643
639 VLOG(1) << "MaybeCreateComponent"; 644 VLOG(1) << "MaybeCreateComponent";
640 IBusComponent* component = ibus_component_new(bus_name_.c_str(), 645 IBusComponent* component = ibus_component_new(bus_name_.c_str(),
641 description_.c_str(), 646 description_.c_str(),
642 "", 647 "",
643 "", 648 "",
644 engine_name_.c_str(), 649 engine_name_.c_str(),
645 "", 650 "",
646 "", 651 "",
647 ""); 652 "");
648 ibus_component_add_engine(component, 653 ibus_component_add_engine(component,
649 ibus_engine_desc_new(engine_id_.c_str(), 654 ibus_engine_desc_new(engine_id_.c_str(),
650 description_.c_str(), 655 description_.c_str(),
651 description_.c_str(), 656 description_.c_str(),
652 language_.c_str(), 657 language_.c_str(),
653 "", 658 "",
654 engine_name_.c_str(), 659 engine_name_.c_str(),
655 "", 660 "",
656 layout_.c_str())); 661 layout_.c_str()));
657 662
658 IBusFactory* factory = ibus_factory_new(ibus_bus_get_connection(ibus_)); 663 ibus_factory_add_engine(g_factory_, engine_id_.c_str(),
659 ibus_factory_add_engine(factory, engine_id_.c_str(),
660 IBUS_TYPE_CHROMEOS_ENGINE); 664 IBUS_TYPE_CHROMEOS_ENGINE);
661 ibus_bus_register_component(ibus_, component); 665 ibus_bus_register_component(ibus_, component);
662 g_object_unref(component); 666 g_object_unref(component);
663 667
664 return true; 668 return true;
665 } 669 }
666 670
667 static void OnServiceMethodCall(IBusService* service, 671 static void OnServiceMethodCall(IBusService* service,
668 GDBusConnection* connection, 672 GDBusConnection* connection,
669 const gchar* sender, 673 const gchar* sender,
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 unsigned int page_size_; 868 unsigned int page_size_;
865 unsigned int cursor_position_; 869 unsigned int cursor_position_;
866 std::string aux_text_; 870 std::string aux_text_;
867 bool aux_text_visible_; 871 bool aux_text_visible_;
868 std::vector<EngineProperty*> properties_; 872 std::vector<EngineProperty*> properties_;
869 std::map<std::string, EngineProperty*> property_map_; 873 std::map<std::string, EngineProperty*> property_map_;
870 874
871 std::set<IBusChromeOSEngine*> engine_instances_; 875 std::set<IBusChromeOSEngine*> engine_instances_;
872 876
873 static ConnectionMap* g_connections_; 877 static ConnectionMap* g_connections_;
878 static IBusFactory* g_factory_;
874 }; 879 };
875 880
876 IBusEngineControllerImpl::ConnectionMap* 881 IBusEngineControllerImpl::ConnectionMap*
877 IBusEngineControllerImpl::g_connections_ = NULL; 882 IBusEngineControllerImpl::g_connections_ = NULL;
878 883
884 IBusFactory* IBusEngineControllerImpl::g_factory_ = NULL;
885
879 void ibus_chromeos_engine_class_init(IBusChromeOSEngineClass *klass) { 886 void ibus_chromeos_engine_class_init(IBusChromeOSEngineClass *klass) {
880 IBusEngineControllerImpl::InitEngineClass(klass); 887 IBusEngineControllerImpl::InitEngineClass(klass);
881 } 888 }
882 889
883 void ibus_chromeos_engine_init(IBusChromeOSEngine* engine) { 890 void ibus_chromeos_engine_init(IBusChromeOSEngine* engine) {
884 IBusEngineControllerImpl::InitEngine(engine); 891 IBusEngineControllerImpl::InitEngine(engine);
885 } 892 }
886 893
887 #endif // HAVE_IBUS 894 #endif // HAVE_IBUS
888 895
(...skipping 17 matching lines...) Expand all
906 #else 913 #else
907 return NULL; 914 return NULL;
908 #endif 915 #endif
909 } 916 }
910 917
911 IBusEngineController::~IBusEngineController() { 918 IBusEngineController::~IBusEngineController() {
912 } 919 }
913 920
914 } // namespace input_method 921 } // namespace input_method
915 } // namespace chromeos 922 } // namespace chromeos
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698